Есть класс 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
layer?
EDIT
Я пробовал это:
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.