Python Django针对两个子对象的最佳实践”;“一对两关系”;

Python Django针对两个子对象的最佳实践”;“一对两关系”;,python,django,django-models,Python,Django,Django Models,我想要一个用户和一个交易模型。 一笔交易只有两个用户,而不是更多或更少。 实现这一目标的最佳方式是什么 我找到了两种方法 示例1:Deal.users as ManyToManyField 类交易(models.Model): users=models.ManyToManyField(AUTH\u USER\u MODEL) 赞成者: 逻辑正确,因为每个用户都是平等的 相反: 需要ModelForm或receiver函数来验证“len(users)==2” 示例2:Deal.use

我想要一个用户和一个交易模型。 一笔交易只有两个用户,而不是更多或更少。 实现这一目标的最佳方式是什么

我找到了两种方法


示例1:Deal.users as ManyToManyField

类交易(models.Model):
users=models.ManyToManyField(AUTH\u USER\u MODEL)
赞成者:

  • 逻辑正确,因为每个用户都是平等的
相反:

  • 需要ModelForm或receiver函数来验证“len(users)==2”

示例2:Deal.user1和Deal.user2分别作为外键

类交易(models.Model):
user1=models.ForeignKey(AUTH\u USER\u MODEL,on\u delete=models.CASCADE)
user2=models.ForeignKey(AUTH\u USER\u MODEL,on\u delete=models.CASCADE)
赞成者:

  • 数据库级验证
  • 在许多情况下更容易使用
相反:

  • 如果我想与Deal.users平等地访问属性,而不是选择显式(Deal.user1,Deal.user2),则需要添加属性或类似属性

<> P>你认为最好的练习是什么?


我也很高兴有更多的方法。

老实说,我更喜欢选项1。我真的尽力避免死胡同。我知道现在你说一个交易只包含两个用户,但你不想发现自己处于这样的境地:一个交易有时包含3个用户,然后你需要添加一个额外的字段

同时,我是django friendships软件包的忠实粉丝,他们的Friend对象与选项2非常相似,但是,他们的字段是from_user和to_user。然后,当接受好友请求时,它们会创建两个好友对象,一个是from_用户,另一个是to_用户。在他们的朋友经理的帮助下,一切都很顺利