创建以下两个模型的实例的适当方法是什么
class Administrator(models.Model):
user = models.OneToOneField(User, primary_key=True)
account = models.ForeignKey(Account)
class Account(models.Model):
owner = models.OneToOneField(Administrator)
两者都需要彼此。没有主要用户(owner
)的帐户不能存在,并且没有帐户,管理员(owner
是)不能存在。是的,一般的用户对象可以存在于它自己,但我不能围绕哪些应该首先以及如何正确实现它。如果我必须在管理员的帐户属性上使用blank = True,我会,但有更好的方法吗?我应该使用交易来确保一个交易不存在吗?
答案 0 :(得分:4)
如果存在两个模型,每个模型都需要另一个模型,它们通常应合并为一个模型。
无论如何,可能有更好的方法来构建类。我个人会按如下方式构建一个UserProfile
类:
class UserProfile(models.Model):
user = models.OneToOneField(User)
administrator = models.BooleanField()
或可能:
class UserProfile(models.Model):
user = models.OneToOneField(User)
class AdministratorProfile(UserProfile):
# attributes
甚至:
class UserProfile(models.Model):
user = models.OneToOneField(User):
class AdministratorProfile(models.Model):
profile = models.OneToOneField(UserProfile)
任何这些方法都应该有效。
答案 1 :(得分:0)
我不完全确定我完全理解Administrator
,Account
和contrib.auth.User
之间的差异,
这感觉就像是 vs 有一个讨论。听起来Administrator
是用户(实际上是用户档案,因为django特有的原因),而管理员有Account
。账户没有任何东西,因为他们不能拥有和拥有。
这就像银行帐户与银行客户。银行客户拥有自己的账户,而不是相反。另一方面,银行账户有一个列表,该列表是可能使用该账户的银行客户。