如何访问Django uniqueconconstraint字段的名称?



接受原问题的答案。编辑1还是不行(下图)


原始问题

我想访问在Meta类中声明的字段名:

class Book(models.Model):
name = CharField(...)
author = CharField(...)
class Meta:
constraints = [
UniqueConstraint(
# fields=['name', 'author'],       # solution 1
Lower("name"), Lower("author"),    # solution 2
name="unique__book_author",
),
]

对于解1,我访问Book._meta.constraints[0].fields=>('name', 'author').

对于解2Book._meta.constraints[0].fields为空:'(

你知道吗?

见https://docs.djangoproject.com/en/4.1/ref/models/constraints/


编辑1

所有字段不一定是函数Lower。如果"author"不是CharField而是FKField,*expressions可以是:

UniqueConstraint(Lower("name"), "author", name="unique__book_author")

试一试:

fileds = []
for expression in Book._meta.constraints[0].expressions:
fields.append(expression.lhs.name)
print(fileds)
# Output: ['name', 'author']

更新获取非表达式的约束,试试this

filed_names = Book._meta.constraints[0].columns