如何在Organization-Owner-Member模型中删除循环依赖项?

时间:2016-10-16 02:11:06

标签: python django django-models

Heyo,我对这些东西很新,所以请原谅我这是一个愚蠢的问题。 我正在尝试创建一个应用程序,用户可以在其中创建组织并加入现有组织。我的要求是:

  • 组织可能只有一个用户指定了所有者(创建它的用户)
  • 用户必须能够加入多个组织
  • 用户必须能够创建组织,因此才能成为多个组织的所有者

到目前为止,我有以下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文档。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

我仍然无法理解为什么你有这么多循环信息。您的OrgMember班级有一个组织字段,即使Org已有ManyToMany OrgMember。与OrgOwner相同的内容 - 除了指向已OrgMember的{​​{1}}的{​​{1}}之外。这两个类只有两个字段 - Org与之关联,然后是User。除非有更多的字段,否则它们没有用处 - 在一个模型中可以完成同样的事情:

Org

我建议你多做一些阅读about Django's relationship fields