QuerySet, Object n'a pas d'ID d'attribut - Django
Je suis en train de récupérer l'id de l'objet dans django, mais je reçois l'erreur suivante
Valeur d'Exception: QuerySet; l'Objet n'a pas d'attribut id.
ma fonction dans 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')
L'erreur se produit dans la condition if dans cette partie (attachedInfo=au.id). J'ai vérifié que lorsque je l'ai retiré de l'état, tout fonctionnait bien.
Voici 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
Toute aide pourquoi j'obtiens cette erreur?!
source d'informationauteur omarsafwany
Vous devez vous connecter pour publier un commentaire.
cette ligne de code
at = AttachedInfo.objects.filter(attachedMarker=m.id, title=title)
renvoie une queryset
et que vous tentez d'accéder à un champ (qui n'existe pas).
ce que vous avez probablement besoin est
La raison pourquoi vous obtenez l'erreur est parce que
at
est unQuerySet
c'est à dire: une liste. Vous pouvez faire quelque chose commeat[0].id
ou de l'utilisationget
au lieu defilter
pour obtenir leat
objet.Espère que cela aide!
Dans la plupart des cas, vous ne voulez pas gérer la non-existence des objets comme ça. Au lieu de
utilisation
Il est recommandé Django raccourci.