【发布时间】:2021-08-25 17:10:40
【问题描述】:
我打算在 Django 模板中比较 IntegerChoice 的值:
class SomeModel(models.Model):
class Answer(models.IntegerChoices):
NO = 0, _('No')
YES = 1, _('Yes')
__empty__ = _('(Unknown)')
answer = models.IntegerField(choices=Answer.choices)
SomeModel.objects.create(answer=0)
somemodel = SomeModel.objects.filter(answer=0)
Inside template :
{% if somemodel.answer == SomeModel.Answer.YES %}
...
{% else %}
<h1>{{ somemodel.get_answer_display() }}</<h1>
{% endif %}
然而,这并没有进入真正的 if 情况,也不喜欢 "SomeModel.get_answer_display" 末尾的 "()" 以及以下消息:
Could not parse the remainder: '()' from 'SomeModel.get_answer_display()'
内景:
class BrowseView(View):
@method_decorator(login_required(login_url='/login/'))
def get(self, request):
somemodel = SomeModel.objects.all()
return render(self.request, 'browse/index.html',
{
'somemodel': somemodel
})
如何使过滤器按预期工作?
【问题讨论】:
-
删除
()所以SomeModel.get_answer_display,Django 模板语言支持有限的语法,以便将业务逻辑与表示逻辑分开。模板引擎会自动调用不带任何参数的方法 -
somemodel是 QuerySet 而不是SomeModel的 instance 因此somemodel.get_answer_display没有多大意义,除非有一个你没有在问题...
标签: django django-models django-templates django-filter