按CharField选项文本属性筛选



如何通过选择文本而不是选择键进行筛选?

假设您在模型中有以下CharField:

CHOICES = ( ('FI', 'First'), ('SE', 'Second'), ('TH', 'Third') )
choiceField = models.CharField(max_length=2, choices=CHOICES)

然后你试着在这样的视图中过滤它:

query_in_choice_field = Model.objects.filter(choiceField__contains=query)

查询是一个字符串,它可以是"third"或"ir">

此筛选器仅检查"FI"、"SE"one_answers"TH"。

您将如何按"第一"、"第二"one_answers"第三"进行筛选?

你不能开箱即用。CHOICES元组中的第二个值是Django管理中显示在下拉列表中的值。第一个值是存储在数据库中的值。

你可以做的是在python中过滤它,而不是在数据库查询中尝试,例如

def get_containing(choices, needle):
containing = []
for k, v in choices:
if needle in v:
containing.append(k)
return containing

query = 'ir'
qs = Model.objects.filter(choiceField__in=get_containing(Model.CHOICES, query))
print(qs)  # Objects where selected choice is 'FI' or 'TH'

最新更新