'查询集'对象没有属性。奇怪的情况

时间:2015-02-21 09:49:43

标签: python django python-2.7 django-views

我收到错误,我真的不知道为什么Django会以一种奇怪的方式做出反应。

如果我写:

from jezyk.models import Jezyk
from pytania.models import Pytanie
from userprofile.models import UserProfile

def test_qr(request):
    # Create the HttpResponse object with the appropriate PDF headers.
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="egzamin.pdf"'

    uzyt = UserProfile.objects.all().order_by('user_id')
    jez = Jezyk.objects.all()

    pytanie = Pytanie.objects.all().order_by('godzina')

    p = canvas.Canvas(response)


    for z, uzyt in enumerate(UserProfile.objects.order_by('godzina', 'jezyk_id')):

        if jez.jezyk ==  'EN' :
            for i, pytanie in enumerate(Pytanie.objects.all()):
                p.drawString(10, 400 + i*210, ' '+ pytanie.title) 

我收到错误:

Exception Value: 'QuerySet' object has no attribute 'jezyk'

此错误来自此处:

    if jez.jezyk ==  'EN' :

我觉得很奇怪,因为这段代码有效:

    uzyt = UserProfile.objects.all().order_by('user_id')

为什么无法从表jezyk访问列jezyk?

在我的sqlite表jezyk中我有2列:id和jezyk就像这里:

enter image description here

2 个答案:

答案 0 :(得分:1)

jez的值为QuerySet,且查询集没有名为jezyk的属性:

jez = Jezyk.objects.all()

据我了解,您希望迭代所有用户配置文件并检查其语言设置。如果是这样,我认为您甚至不需要获取所有Jezyk个对象,您可以执行以下操作;

for z, uzyt in enumerate(UserProfile.objects.select_related('jezyk').order_by('godzina', 'jezyk_id')):
    if uzyt.jezyk.jezyk == 'EN':
        ...

答案 1 :(得分:0)

您没有在代码中发布完整的回溯,但是有一个错误是明确的:jez不是简单的模型对象,而是包含所有SQL结果的QuerySet,因此

jez = Jezyk.objects.all()
if jez.jezyk == 'EN':  # <- this fails here.

也许您想要了解用户的语言:uzyt.jezyk.jezyk,并将其与'EN'进行比较:uzyt.jezyk.jezyk == 'EN'