在我的案例中如何设置带有附加字段的多对多

How to set up many-to-many with additional fields in my case

有 3 个模型:Item、Offer 和 RatingAndReviews。客户为承包商创建任务,这些任务存储在 Items 中,承包商在 Offer 中为任务提供报价。项目可以有多个报价。任务完成后,客户为承包商留下评级和评论。创建模型的最佳方法是什么

class Item(models.Model):
    owner = models.ForeignKey(
        CustomUser,
        on_delete=models.CASCADE,
    )
    offers = models.ManyToManyField(
        'Offer',
        through='RatingAndReview'
    )

class Offer(models.Model):
    owner = models.ForeignKey(
        CustomUser,
        on_delete=models.CASCADE,
    )

class RatingAndReview(models.Model):
    item = models.ForeignKey(Item, on_delete=models.CASCADE)
    offer = models.ForeignKey(Offer, on_delete=models.CASCADE)
    rating = models.PositiveIntegerField()
    review = models.TextField()

我曾经有一个一对多的关系 Item - Offer 并且可以选择 Offer 的所有者和我为其制作的 Item,但必须添加 RatingAndReview。现在,当我在 django-admin 中创建报价时,我无法访问要为其选择的项目。 我的模型看起来不错吗?创建报价时如何访问项目?

实现它的一些想法:

  • 如果报价与 一个 项目相关,则 Offer 中应该有一个 item 外键 (FK),并且没有 M2M 字段 offersItem.
  • 您必须决定评分是针对商品还是报价,并且在 Review 中只保留一个 FK,当 Offer 之间已经存在关系时,保留两个没有意义和 Item.
  • 您需要某种方式来指定 "winning" 出价,例如作为 Item 上的 selected_offer 字段。如果您选择将评论限制在项目而不是优惠,这也有助于将评论链接到出价和出价者。