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

Django - disable duplicates in related set

有classOrderSubOrder和classProduct。我想确保没有 Order 对象会包含多个 SubOrder 具有相同 Product 对象的对象。

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

我不想让一个 Order 对象拥有多个具有相同 ProductSubOrders。 例如 Order[Suborder[A,12],Suborder[B,12],Suborder[B,5]] 应该加注 ValidationError 因为有两个 SubOrders 具有相同的 Product B.

是否可以在 modeldatabase 图层上执行此操作?

编辑

我试过这个:

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 管理中创建这样的订单。

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

class SubOrder(models.Model):
    class Meta:
        unique_together = ('order', 'product',)