【问题标题】:Updated inherited django model field attributes?更新了继承的 django 模型字段属性?
【发布时间】:2026-02-16 12:55:02
【问题描述】:

假设我从 django 用户类继承:

# import AbstractUser class ....
class MyUser(AbstractUser):

    gender = models.Charfield(....
    ....
    # I want to make the email field blank=False and unique=True
    # however, to my knowledge, python doesn't allow you to 
    # override inherited fields

那么我如何使电子邮件字段空白=False 并且唯一=True。注意:我也在使用 South,所以 South 友好的代码会很好。 (注意:我使用的是 Django 1.5,所以希望有一个解决方案,这样我就不必从 AbstractBaseUser 创建自己的用户模型)

【问题讨论】:

    标签: python django django-models


    【解决方案1】:
    class MyUser(AbstractUser):
    
        gender = models.Charfield(....
    
        def __init__(self, *args, **kwargs):
           super(self, MyUser).__init__(*args, **kwargs)
           email = models.EmailField(blank=False, unique=True)
           email.contribute_to_class('email', self)
    

    【讨论】:

    • 试图覆盖电子邮件,但认为它不起作用,因为 South 表示它们是重复的字段。另请参阅*.com/a/6899713/749477
    • 我忘了你可以用 AbstractBaseUser 而不是 AbstractUser 覆盖它
    • email 被定义为 AbstractUser 中的一个字段,这是我要使用的类而不是 AbstractBaseUser。因此,虽然您的答案有效,但它并没有覆盖该领域,这是我更喜欢的。
    • 不,没关系,我已经切换到只使用 AbstractBaseUser。检查标记的努力和时间。但如果你能找到解决方案,那就太棒了。
    • 是的,谢谢你,我会的,因为我将在我的下一个大项目中使用 CBV。我将研究如何做到这一点:)