2013-05-15 20 views
8

djangoで特定のオブジェクトのIDを取得しようとしていますが、次のエラーが発生します。 Exception Value:QuerySet;オブジェクトには属性IDがありません。 views.pyQuerySetオブジェクトに属性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') 

エラーで私の関数は、この部分であれば条件で発生します(attachedInfo = at.id)。条件から削除したときと同じように、すべてが正常に機能していたことを確認しました。

は、ここで私はこのエラーを取得していますなぜすべてのヘルプ

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 

models.pyです!

答えて

19

コード

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

のこのラインはqueryset

を返します(存在しない)、それのフィールドにアクセスしようとしています。あなたはおそらく必要なもの

は、あなたがそのような存在しないオブジェクトを処理する必要はありませんほとんどの場合には

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

これによりエラーが発生する可能性があります。それを正常に処理するには、 '.filter'を実行してから' [0] ' – karthikr

+1

querysetに要素がある場合は何を返しますか? – EsseTi

+0

あなたは空のクエリーセットをチェックし、次に[0]をしなければなりません。 – karthikr

12

atQuerySetです。つまり、エラーが発生したのは、リストです。 at[0].idのような操作を行うか、filterの代わりにgetを使用してatオブジェクトを取得します。

希望すると助かります!

+0

私はフィルタの代わりに取得し、素晴らしい動作します。どうもありがとうございました。 – omarsafwany

+0

私はこれを見つけてフィルタを試し、 '' [0] .id ''を返します。 'dict'オブジェクトには属性 'id'がありません。多分あなたはそれを訂正することができますか? – novski

1

です。代わりに

ad[0].id 

使用

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

のそれは、そのためのDjango shortcutをお勧めします。

関連する問題