假设我有这个模型:
class XYZ(Model):
id = models.BigAutoField(primary_key=True)
keys_1 = models.IntegerField()
keys_2 = models.JSONField(null=False, default=dict)
keys_3 = models.DateField(null=True, default=None)
values = models.JSONField(null=False, default=dict)
class Meta:
db_table = "xyz"
constraints = [
models.UniqueConstraint(
fields=["keys_1", "keys_2"],
name="unicity_when_keys_3_null",
condition=Q(keys_3__isnull=True),
),
models.UniqueConstraint(
fields=["keys_1", "keys_2", "keys_3"],
name="unicity",
),
]
Run Code Online (Sandbox Code Playgroud)
然后我这样做:
XYZ.objects.bulk_create(
data,
update_conflicts=True,
unique_fields=["keys_1", "keys_2", "keys_3"],
update_fields=["values"],
)
Run Code Online (Sandbox Code Playgroud)
作为对象data列表XYZ
data[n].keys_3不是None,则按预期工作data[n].keys_3是None,它会在冲突时失败,引用unicity_when_keys_3_null约束难道我做错了什么 ?
附:
XYZ.objects.bulk_create(
data,
update_conflicts=True,
unique_fields=["keys_1", "keys_2"],
update_fields=["values"],
)
XYZ.objects.bulk_create(
data, …Run Code Online (Sandbox Code Playgroud)