到目前为止,我有以下models.py:
from django.db import models
from django.utils.translation import ugettext_lazy as _
from myapp.users.models import User
class TimeStampedModel(models.Model):
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
class Org(TimeStampedModel):
name = models.CharField(
_('Organization name'),
max_length=255,
)
owner = models.OneToOneField('OrgOwner')
members = models.ManyToManyField(
'OrgMember',
related_name='organization_members'
)
users = models.ManyToManyField(
User,
related_name='organization_users'
)
def __str__(self):
return self.name
class OrgMember(TimeStampedModel):
user = models.ForeignKey(
User,
related_name='user_profile'
)
organization = models.ForeignKey(
Org,
related_name='member_organization'
)
def __str__(self):
return self.user.username
class OrgOwner(TimeStampedModel):
member = models.OneToOneField(OrgMember)
organization = models.OneToOneField(Org)
def __str__(self):
return self.member.__str__()
我的问题是到目前为止我设计模型的方式,我有一个循环依赖。为了让用户从头开始创建一个Org,他需要成为Org的OrgMember,尚未创建Org。换句话说,我不能在没有Org的情况下实例化一个OrgMember,但我不能在没有OrgOwner的情况下实例化一个新的Org,为此我还需要一个OrgMember。
我确信我的推理中只有一个错误。但也许有一些最佳实践适用于你可以分享的这种情况。对此可能有一个相当简单的解决方案,但我无法在一小时内找到一个搜索和阅读django文档。非常感谢任何帮助!
答案 0 :(得分:0)
我仍然无法理解为什么你有这么多循环信息。您的OrgMember
班级有一个组织字段,即使Org
已有ManyToMany
OrgMember
。与OrgOwner
相同的内容 - 除了指向已OrgMember
的{{1}}的{{1}}之外。这两个类只有两个字段 - Org
与之关联,然后是User
。除非有更多的字段,否则它们没有用处 - 在一个模型中可以完成同样的事情:
Org
我建议你多做一些阅读about Django's relationship fields