在Django中存储有关用户的其他信息

时间:2011-09-09 02:06:00

标签: django django-models

由于某些原因(特别是尝试使DB方案升级更容易),我需要将所有用户的扩展属性存储在另一个对象中(例如在this question中分隔Person和Address)

我有一个AUTH_PROFILE_MODULE覆盖设置并捕获def_user_profile

class CustomUser(models.Model):
    user = models.ForeignKey(User, unique=True)

def create_user_profile(sender, instance, created, **kwargs):
    if created:
        CustomUser.objects.create(user=instance)

问题是:如果我向CustomUser添加自定义类型属性,如下所示:

class CustomPropertySet(models.Model):
    this_is_a_Farmer = models.BooleanField()

class CustomUser(models.Model):
    user = models.ForeignKey(User, unique=True)
    extdata = models.CustomProperySet()

这会在添加新用户时自动创建CustomProperySet条目吗? CustomPropertySet是否需要与ForeignKey关联回其CustomUser所有者? 第二个问题:删除对象时如何删除这样的扩展属性?

2 个答案:

答案 0 :(得分:1)

对这些问题的明显答案是“试一试并找出答案”,但我们在这里是一个有礼貌的人......

  • 会自动创建CustomPropertySet吗?

当您为extdata分配内容时,您分配了什么?分配True和False可能不起作用,你必须分配一个CustomPropertySet实例,并获得一个你必须创建一个实例。

尝试一下,这将变得清晰。

  • CustomPropertySet是否需要指回CustomUser实例?

没有。 CustomProper t ySet可以在它的寂寞中存活下来。您的CustomUser指向它,但它并不害羞,并不关心是谁或有多少人指向它。

  • 如何删除级联依赖项?

See the documentation about cascading deletes

答案 1 :(得分:1)

您无法将模型指定为其他模型的字段。它只是不起作用。除了其他任何东西之外,还有大量的元类魔法将模型级别的字段声明转换为实例级属性,而这对于使用CustomProperySet尝试的模型来说无法使用。

无论如何,我无法真正理解你想要做什么。如果您想在配置文件类中添加额外的数据,只需添加它 - 如果您希望该数据的结构与其他类共享,则子类化可能会有所帮助。