0

我希望模型中的一个字段基于另一个字段是唯一的,反之亦然。

例如:

class Shipment(models.Model):

    supplier = models.ForeignKey("Supplier", on_delete=models.PROTECT, related_name='shipments')
    external_id = models.CharField(max_length=128)

我希望两批货物不能有相同的供应商和相同的 external_id,但可以有相同的 external_id 和不同的供应商,或者相同的供应商和不同的 external_id。

我知道unique_together。但它使供应商只有一个 external_id。但是,我希望供应商拥有多个 external_id,而它们都是唯一的。

我可以在 save() 方法中检查这个约束,但我想要一个数据库约束,或者更聪明的东西。

4

1 回答 1

0

您是否尝试过使用UniqueConstraint

class Shipment(models.Model):
    supplier = models.ForeignKey("Supplier", on_delete=models.PROTECT, related_name='shipments')
    external_id = models.CharField(max_length=128)

    class Meta:
        constraints = [models.UniqueConstraint(fields=['supplier', 'external_id'], name='unique_shipment')]


于 2020-11-09T02:28:17.140 回答