【问题标题】:How to set up many-to-many with additional fields in my case在我的案例中,如何使用附加字段设置多对多
【发布时间】:2019-04-06 11:16:23
【问题描述】:

有 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()

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

【问题讨论】:

    标签: python django django-orm


    【解决方案1】:

    让它发挥作用的一些想法:

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

    【讨论】:

      猜你喜欢
      • 2020-11-01
      • 2019-11-29
      • 2020-07-06
      • 1970-01-01
      • 2021-06-01
      • 2017-01-10
      • 2012-03-29
      • 2017-09-19
      • 2012-03-25
      相关资源
      最近更新 更多