Python Django Boolean字段在模板中返回False,而实际上为True

Python Django Boolean字段在模板中返回False,而实际上为True,python,django,django-models,django-templates,boolean,Python,Django,Django Models,Django Templates,Boolean,这是my models.py: class Sherlock(models.Model): owner = models.ForeignKey(Owner) wifi = models.BooleanField('Wifi', default=False) 这是my views.py,它包含不止一个上下文: class OwnerDetails(generic.DetailView): template_name ='owners/venuedetails.html'

这是my models.py:

class Sherlock(models.Model):
    owner = models.ForeignKey(Owner)
    wifi = models.BooleanField('Wifi', default=False)
这是my views.py,它包含不止一个上下文:

class OwnerDetails(generic.DetailView):
    template_name ='owners/venuedetails.html'
    model = Owner

    def get_context_data(self, **kwargs):
        context = super(OwnerDetails, self).get_context_data(**kwargs)

        self.pk = Owner.objects.get(pk=self.kwargs['pk'])
        featurete_list = FeatureteImage.objects.filter(owner=self.pk)
        context['featurete_list'] = featurete_list

        sherlock = Sherlock.objects.filter(owner=self.pk)
        context['sherlock'] = sherlock
        return context
这是我的模板:

{% if sherlock.wifi %}
    <p>Wifi</p>
{% else %}
    <p><s>Wifi</s></p>
{% endif %} 
{%if sherlock.wifi%}
无线网络

{%else%} 无线网络

{%endif%}
当我转到/admin时,我已经检查了wifi。但我总是得到交叉wifi(模板中的
标记创建交叉wifi)


我的问题是,即使在“我的管理员”中,我检查并保存了wifi字段,但它仍然会返回模板为false。

视图和模板中的这些行不匹配

sherlock = Sherlock.objects.filter(owner=self.pk)

{% if sherlock.wifi %}
{% for s in sherlock %}
    {% if s.wifi %}
    Wifi
    {% endif %}
{% endfor %}
您无法访问queryset上的
wifi
属性,您可以在实例上访问它

如果queryset可能包含多个项,则可以循环模板中的实例

{% for s in sherlock %}
    {% if s.wifi %}
    Wifi
    {% endif %}
{% endfor %}
如果queryset应该只返回一个实例,那么可以使用
get()
而不是
filter()

您可以对此进行改进,以处理对象不存在的情况

try:
    sherlock = Sherlock.objects.get(owner=self.pk)
except Sherlock.DoesNotExist:
    # do something here
有时,
get\u object\u或\u 404
快捷方式对此很有用

sherlock = get_object_or_404(Sherlock, owner=self.pk)
最后,请注意,在模板中不需要与True进行比较,只需使用

{% if sherlock.wifi %}

什么是便利设施?它是从哪里来的?你永远不应该明确地与True进行比较,总是这样做
{%if amentities%}
。你在
scherlock
/
sherlock
@DanielRoseman中有一个输入错误。对不起,我更改了值,以便让读者更清楚。我改变了它,但它不起作用,伙计。@Sayse这不是问题所在。改变值并不能让读者更清楚。为什么
Sherlock
会有一个wifi布尔字段?另一个问题是,当示例更改时,错误通常被隐藏。是的,谢谢!sherlock=sherlock.objects.get(owner=self.pk)这就是我的问题。谢谢你提供的额外信息。