有一个类Order
,SubOrder
和类Product
。我想确保没有一个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
对象具有多个SubOrders
和相同的Product
。
例如,Order[Suborder[A,12],Suborder[B,12],Suborder[B,5]]
应该提高ValidationError
,因为有两个SubOrders
具有相同的Product
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 :(得分:1)
订单和产品的唯一约束可防止为同一订单和同一产品保存多个子订单:
class SubOrder(models.Model):
class Meta:
unique_together = ('order', 'product',)