代码之家  ›  专栏  ›  技术社区  ›  Milano

Django-禁用相关集合中的重复项

  •  0
  • Milano  · 技术社区  · 7 年前

    有一节课 Order , SubOrder 和阶级 Product 1.我想确定没有 顺序 对象将包含多个 亚目 具有相同属性的对象 产品 对象

    class Order(TimeStampedModel):
        ....
    
    class SubOrder(models.Model):
        order = models.ForeignKey('orders.Order', on_delete=models.CASCADE, related_name='suborders')
        product = models.ForeignKey('products.Product', on_delete=models.CASCADE)
        quantity = models.PositiveIntegerField(verbose_name='Počet')
    

    如果有3种产品- A、 B,C

    我不想要 顺序 对象具有多个 SubOrders 同样 产品 。 例如 Order[Suborder[A,12],Suborder[B,12],Suborder[B,5]] 应该提高 ValidationError 因为有两个 亚目 同样 产品 B 。

    有可能在电视上这样做吗 model 或 database 层

    编辑

    我试过这个:

    def clean(self):
        neighbour_suborders = self.order.suborders.filter(product=self.product)
        if self.pk:
            neighbour_suborders = neighbour_suborders.exclude(pk=self.pk)
        if neighbour_suborders.exists():
            raise ValidationError("Takýto produkt už v objednávke existuje!")
    

    但它允许在Django admin中创建这样的命令。

    0 回复  |  直到 7 年前
        1
  •  1
  •   Endre Both    7 年前

    订单和产品的唯一约束可防止为同一订单和同一产品保存多个子订单:

    class SubOrder(models.Model):
        class Meta:
            unique_together = ('order', 'product',)
    
    推荐文章