由于某些原因(特别是尝试使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所有者? 第二个问题:删除对象时如何删除这样的扩展属性?
答案 0 :(得分:1)
对这些问题的明显答案是“试一试并找出答案”,但我们在这里是一个有礼貌的人......
当您为extdata
分配内容时,您分配了什么?分配True和False可能不起作用,你必须分配一个CustomPropertySet实例,并获得一个你必须创建一个实例。
尝试一下,这将变得清晰。
没有。 CustomProper t ySet可以在它的寂寞中存活下来。您的CustomUser指向它,但它并不害羞,并不关心是谁或有多少人指向它。
答案 1 :(得分:1)
您无法将模型指定为其他模型的字段。它只是不起作用。除了其他任何东西之外,还有大量的元类魔法将模型级别的字段声明转换为实例级属性,而这对于使用CustomProperySet
尝试的模型来说无法使用。
无论如何,我无法真正理解你想要做什么。如果您想在配置文件类中添加额外的数据,只需添加它 - 如果您希望该数据的结构与其他类共享,则子类化可能会有所帮助。