[已解决]如何扩展User模型,能接收数据表中新加的字段值,django1.5

你们可以在github上搜seahub,就是seahub里面的代码
我加了个表字段是creator
作者修改了auth框架

我想问一下,如何加字段,User的其他属性没有User类中定义呢?在哪里定义的呢?

阅读 2.9k
2 个回答
一般来说, 默认的 User 会是这个样子,源码在 django.contrib.auth.models 中
class User(models.Model):
    username = models.CharField(max_length=255,....)
    password = ....
    is_active = ...


两种方式
1. 继承 User

from django.contrib.auth.models import User

class MyUser(User):
    name = ....
    gender = ...
    age = ....

    def __unicode__(self):
        return "%s" %(self.user.username)

2. 外键

from django.contrib.auth.models import User

class MyUser(models.Model):
    user = models.ForeignKey(User, verbose_name="user")
    name = ...
    age = ...
    gender = ...

    def __unicode__(self):
        return "%s" %(self.user.username)

谢邀。指出几个错误。(手机码字)

模型定义应以 django.models.Model 为基类

感觉你这样写可能是受 seahub.auth.models.AnonymousUser 的影响,认为模型定义就是这么写的,实际上并不是——AnonymousUser 只是作为一个特殊值供占位使用。

直接改表是不能扩展模型的

django 并不能通过识别表的变动来更改模型,相反,我们必须通过修改模型以将变动迁移到数据库中。

扩展 User 的方式不对

扩展默认 User 常有两种方法:

  • 继承法。通过继承 User 的基类以覆盖原有 User 实现。将 settings.AUTH_USER_MODEL设为自定义模型的路径使其生效。

  • Profile 法()。通过建立 profile 表并与 user 建立一对一的关系,实现给 user 添加扩展数据的功能。

详细内容请 google: django customize user model


p.s. 可以看出: 你对 django 并不熟悉。建议在充分了解 django 的前提下对 seahub 进行使用和修改。

推荐问题