Django Admin в одной области требуется, связанный с другой областью

Я использую Django admin для сохранения моделей, моя модель выглядит следующим образом:

    class PurchaseItem(models.Model):
       product=models.ForeignKey("products.Product",on_delete=models.CASCADE,blank=True,null=True)
       product_attribute=models.ForeignKey("products.ProductAttribute",on_delete=models.CASCADE,blank=True,null=True)
   

Цель состоит в том, чтобы сохранить только один из внешних ключей, например :

  • Если продукт не является null, то атрибут product должен быть null
  • .
  • То же самое для атрибута product_attribute, если он не null, то продукт должен быть null
    Примечание:
    product и product_attribute не могут быть null одновременно .

    как этого добиться используя Django admin.

Я бы добавил clean() метод к этой модели. Такой метод может быть реализован как:

class PurchaseItem(models.Model):
    ...
    def clean(self):
        if self.product is None and self.product_attribute is not None:
            raise ValidationError("Can not set both product and product attribute")
        if self.product is not None and self.product_attribute is None:
            raise ValidationError("Can not set both product attribute and product")
        if self.product is None and self.product_attribute is None:
            raise ValidationError("Either product or product attribute must be set")
Вернуться на верх