Django 中的条件 unique_together

Arv*_*mar 4 django python-3.x django-rest-framework

我的模型中有以下唯一约束。

class Meta:
        unique_together = (('crop', 'order', 'sku'),)
Run Code Online (Sandbox Code Playgroud)

但是在某些情况下 sku 可能为 null,在这种情况下,这个 unique_together 不起作用,因为 null 不等于 null。 'sku'),) else (('crop', 'order'),)。

Wil*_*sem 5

,您可以利用Django 的约束框架,并在UniqueConstraint[Django-doc] 中添加条件:

from django.db import models
from django.db.models import Q

class MyModel(models.Model):
    # …

    class Meta:
        constraints = [
            models.UniqueConstraint(
                fields=['crop', 'order', 'sku'],
                name='unique_1'
            ),
            models.UniqueConstraint(
                fields=['crop', 'order'],
                condition=Q(sku=None),
                name='unique_2'
            )
        ]
Run Code Online (Sandbox Code Playgroud)

请注意,并非每个数据库本身都支持这一点,因此会强制执行这一点。