在我的案例中如何设置带有附加字段的多对多
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 字段 offers
在 Item
.
- 您必须决定评分是针对商品还是报价,并且在
Review
中只保留一个 FK,当 Offer
之间已经存在关系时,保留两个没有意义和 Item
.
- 您需要某种方式来指定 "winning" 出价,例如作为
Item
上的 selected_offer
字段。如果您选择将评论限制在项目而不是优惠,这也有助于将评论链接到出价和出价者。
有 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 字段offers
在Item
. - 您必须决定评分是针对商品还是报价,并且在
Review
中只保留一个 FK,当Offer
之间已经存在关系时,保留两个没有意义和Item
. - 您需要某种方式来指定 "winning" 出价,例如作为
Item
上的selected_offer
字段。如果您选择将评论限制在项目而不是优惠,这也有助于将评论链接到出价和出价者。