QuerySet,Object没有属性id - Django

dxxyhpgq  于 2023-05-01  发布在  Go
关注(0)|答案(4)|浏览(197)

我试图在Django中获取某个对象的id,但我一直得到以下错误:
异常值:QuerySet;对象没有属性ID。
我在 www.example.com

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

错误发生在此部分的if条件(attachedInfo=at.id)中。我检查了一下,当我把它从条件下删除时,一切都开始工作正常。
这里是 www.example.com

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

谁能帮我理解为什么我得到这个错误?!

f0ofjuux

f0ofjuux1#

这行代码
at = AttachedInfo.objects.filter(attachedMarker=m.id, title=title)
返回queryset
并且您正在尝试访问它的一个字段(该字段不存在)。
你可能需要

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

k2arahey2#

你得到错误的原因是因为atQuerySet ie:你可以做一些类似at[0].id的事情,或者使用get而不是filter来获取at对象。
希望有帮助!

py49o6xq

py49o6xq3#

在大多数情况下,您不希望像这样处理不存在的对象。而不是

ad[0].id

使用

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

这是推荐的Django快捷方式。

y53ybaqx

y53ybaqx4#

我得到了这个错误几乎2天,这个错误的主要问题完全取决于两个文件i。e.
www.example. com & www.example.com
我得到这个错误,因为我想从电子邮件ID创建会话,但它显示他们没有属性电子邮件,所以它没有获取任何str对象。
解决方案:-
models.py

class Register(models.Model):
userid = models.AutoField(primary_key=True)
name = models.CharField(max_length=100)
email = models.EmailField(max_length=200)
password = models.CharField(max_length=100)

def __str__(self):
    return "%s %s" %(self.name, self.email)

根据您的项目,为您希望从中获取数据的以下内容创建字符串。
views.py

if request.method == "POST":
        emailx1 = request.POST['emailx']
        passwordx1 = request.POST['passwordx']
        if (Register.objects.filter(email=emailx1, password=passwordx1)).exists():
            a = Register.objects.filter(email=emailx1).first()
            request.session['session_name'] = a.email
            request.session['session_id'] = a.userid
            return render(request, "index.html", {"a": a})

对Model使用.first()方法。对象方法这已经解决了我的问题,希望它也能解决你的问题。

相关问题