接受原问题的答案。编辑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')
.
对于解2,Book._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