2013-05-15 26 views
8

Django'da belirli bir nesnenin kimliğini almaya çalışıyorum ancak şu hatayı almayı sürdürüyorum Özel Durum Değeri: QuerySet; Nesnede özellik kimliği yok. views.pyQuerySet, Object özellik yok id - Django

@csrf_exempt 
def check_question_answered(request): 
    userID = request.POST['userID'] 
    markerID = request.POST['markerID'] 
    title=request.POST['question'] 
    m = Marker.objects.get(id=markerID) 
    u = App_User.objects.get(id=userID) 
    print userID 
    print markerID 
    print title 
    # userID='1' 
    # markerID='1' 
    # title='Hello' 
    at = AttachedInfo.objects.filter(attachedMarker=m.id, title=title) 
    print 'user' 
    print u.id 
    print 'marker' 
    print m.id 
    print 'att' 
    print at 
    #print at.id 
    if(Answer.objects.filter(marker=m.id, user=u.id, attachedInfo=at.id)): 
     print 'pass' 
     return HttpResponse('already answered') 
    else: 
     print 'not' 
     return HttpResponse('not answered yet') 

hata benim fonksiyonu bu bölümünde ise durumun meydana gelir (attachedInfo = at.id). Bunu durumdan çıkardığım zaman, her şeyin iyi çalıştığını kontrol ettim.

İşte

class AttachedInfo(models.Model): 
    title = models.CharField(max_length=200) 
    helpText = models.CharField(max_length=200, null=True, blank=True) 
    type = models.CharField(max_length=200) 
    attachedMarker = models.ForeignKey(Marker) 
    answer1 = models.CharField(max_length=200, null=True, blank=True) 
    answer2 = models.CharField(max_length=200, null=True, blank=True) 
    answer3 = models.CharField(max_length=200, null=True, blank=True) 
    answer4 = models.CharField(max_length=200, null=True, blank=True) 
    correctAnswer = models.CharField(max_length=50, null=True, blank=True) 
    optionalMessage = models.CharField(max_length=200, null=True, blank=True) 
    def __unicode__(self): 
     return self.title 

class Answer(models.Model): 
    user = models.ForeignKey(App_User) 
    app = models.ForeignKey(App, null=True, blank=True) 
    marker = models.ForeignKey(Marker) 
    attachedInfo = models.ForeignKey(AttachedInfo) 
    textAnswer = models.CharField(max_length=200, null=True, blank=True) 
    mcqAnswer = models.CharField(max_length=200, null=True, blank=True) 
    answered = models.BooleanField(default=False) 
    def __unicode__(self): 
     return self.attachedInfo.title 

bu hatayı alıyorum neden Herhangi bir yardım models.py var ?!

cevap

19

bu hat bir queryset

döndürür ve (o yok) bunun bir alan ulaşmaya çalışıyorsunuz. muhtemelen ne gerek

böyle mevcut değil nesneleri işlemek istemiyorum Çoğu durumda

at = AttachedInfo.objects.get(attachedMarker=m.id, title=title) 
+1

bu bir hata verebilir. Bunu incelikle işlemek için, '.filter' amd' '[0]' – karthikr

+1

yapın, queryset'in 0 elementi varsa ne döndürüyor? – EsseTi

+0

boş queryset için kontrol etmek ve sonra [0] yapmak ne demek istedim. – karthikr

12

Hatayı almanızın nedeni, at'un QuerySet yani: bir liste olmasıdır. at[0].id gibi bir şey yapabilir ya da at nesnesini almak için filter yerine get kullanın.

Umut eder! kod

at = AttachedInfo.objects.filter(attachedMarker=m.id, title=title)

ait

+0

Filtre yerine alıp harika çalışıyordum. Çok teşekkür ederim. – omarsafwany

+0

Bunun üzerine tökezledim ve filtreyi denedim ve '' [0] .id '' verir: 'dict' nesnesi 'id' özelliğine sahip değildir. Belki bunu düzeltebilirsin? – novski

1

olduğunu. Bunun yerine

ad[0].id 

kullanım

get_object_or_404(AttachedInfo, attachedMarker=m.id, title=title) 

ait Bunun için Django shortcut önerilir.