QuerySet, Object has no attribute id - Django

96,196

Solution 1

this line of code

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

returns a queryset

and you are trying to access a field of it (that does not exist).

what you probably need is

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

Solution 2

The reason why you are getting the error is because at is a QuerySet ie: a list. You can do something like at[0].id or use get instead of filter to get the at object.

Hope it helps!

Solution 3

In most cases you do not want to handle not existing objects like that. Instead of

ad[0].id

use

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

It is the recommended Django shortcut for that.

Share:
96,196
omarsafwany
Author by

omarsafwany

Updated on July 15, 2022

Comments

  • omarsafwany
    omarsafwany almost 2 years

    I'm trying to fetch the id of certain object in django but I keep getting the following error Exception Value: QuerySet; Object has no attribute id. my function in views.py

    @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') 
    

    The error occurs in the if condition in this part (attachedInfo=at.id). I checked that as when I removed it from the condition, everything was working fine.

    Here's models.py

    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
    

    Any help why I'm getting this error?!