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")