用一对一关系实现一对多关系,不需要循环依赖



我有两个模型,User&公司一个公司可能有多个用户和一个所有者(也是一个用户(。一个用户只能与一个公司关联。现在我的问题是,我应该如何维护任何公司的所有者?因为如果我在公司模型中使用任何一对一关系字段,那么它将给我circular-dependency错误,因为我的用户模式中有foreign-key关系字段
型号如下:

用户模型

class User(BaseMixin, AbstractUser, BlameableMixin):
"""Extends django user with extra optional fields."""
role = models.ManyToManyField(Role)
company = models.ForeignKey(
Company,
related_name='user_company_map',
on_delete=models.SET_NULL,
null=True,
)
designation = models.CharField(max_length=max_length_medium, blank=True, unique=False)
mobile_no = models.CharField(max_length=max_length_medium, blank=False, unique=False)
organization = models.CharField(max_length=max_length_medium, blank=False, unique=False)

公司型号

class Company(BaseMixin, BlameableMixin):
"""Company detail."""
name = models.CharField(max_length=max_length_large, blank=True, unique=False)
code_name = models.CharField(max_length=max_length_large, blank=True, unique=True)
domain = models.CharField(max_length=max_length_large, blank=True)

如上面的代码所示,我在User模型上有一个外键字段,它将我的User模式连接到Company

现在,我希望有一个字段可以帮助我跟踪任何特定公司的所有者用户。如果您提供django-orm查询来获取公司对象及其用户和所有者,这也将非常有帮助。我还想询问用户的相关公司,以及他/她是否是该公司的所有者。

注意:我想在公司模型上有所有者字段,但如果根据我的要求,它应该在用户模型中,我不会介意。我只是在寻找一个解决方案。欢迎提出任何建议。谢谢

Django允许您将ForeignKeyto参数指定为字符串(https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey),这将使您能够在Django ORM 中创建关系
class Company(BaseMixin, BlameableMixin):
"""Company detail."""
name = models.CharField(max_length=max_length_large, blank=True, unique=False)
code_name = models.CharField(max_length=max_length_large, blank=True, unique=True)
domain = models.CharField(max_length=max_length_large, blank=True)
owner = models.OneToOne("User", related_name="owner_of")

然后,您可以直接从公司对象company_object.owner访问所有者。通过user_object.company访问特定用户的公司。您还可以通过user_object.owner_of访问用户拥有的公司。

最新更新