【问题标题】:Django model with User, Profile and company具有用户、个人资料和公司的 Django 模型
【发布时间】:2020-03-29 17:37:12
【问题描述】:

我正在尝试构建一个应用程序,但很难弄清楚我的模型。我已经设置了用户身份验证。下一个:

  1. 每个用户都必须是公司的成员(公司有地址信息等)
  2. 每个用户都应该有一个个人资料
  3. 应根据公司成员身份提供发票,以便每个成员都能获得同一页的发票。

所以表格(模型)是:

  • 简介
  • 发票
  • 公司
  • 用户(这个已经存在并且是默认的 django 用户)

这些模型之间的适当模型关系是什么。我真的很感激像 ForeignKey 和 ManyToMany ed. 这样的书面模型关系。

【问题讨论】:

    标签: django django-models many-to-many


    【解决方案1】:

    我们可以在Profile 中定义与CompanyUser 的关系:

    class Profile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        company = models.ForeignKey(Company, on_delete=models.CASCADE)
        # Other fields here
    
    
    class Invoice(models.Model):
        company = models.ForeignKey(Company, on_delete=models.CASCADE)
        # Other fields here
    

    根据您的域限制,您可能希望将ManyToManyField 作为与company 的关系。

    【讨论】:

    • 公司模型是什么样的?我的意思是它不会与这三个中的一个有关系吗?
    • 没有。 Django 会自动将反向关系添加到Company。例如,我们可以通过调用the_company.invoice_set.all() 访问公司的发票。您还可以在字段描述中设置related_name,这样您就可以在我们的示例中使用相关名称而不是invoice_set
    • 非常感谢,我真的需要这个才能走得更远!
    • 我怎样才能创建一个用户同时创建一个具有第一个可用 Company.id 的公司?我试过了,但我不知道如何创建公司:@receiver(post_save, sender=User) def create_user_profile(sender, instance, created, **kwargs): if created: Profile.objects.create(user=实例)
    • 我没明白你的意思。您要一次为每个公司、用户和个人资料创建一个对象吗?如果是,则很大程度上取决于您的程序数据流。我的意思是您可以在单独的视图中创建用户、公司和个人资料中的每一个,或者您可能希望在单个视图中创建这三个(可能是单个事务)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 2014-10-24
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多