8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

QuerySet,对象没有属性 id - Django

geenSf 2月前

47 0

我正在尝试获取 Django 中某个对象的 id,但一直收到以下错误:异常值:QuerySet;对象没有属性 id。views.py 中的我的函数:@csrf_exempt def

我正在尝试获取 Django 中某个对象的 id,但一直收到以下错误:

异常值:QuerySet;对象没有属性 id。

我在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') 

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

这是 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

有人能帮助我理解为什么我会收到这个错误吗?!

帖子版权声明 1、本帖标题:QuerySet,对象没有属性 id - Django
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由geenSf在本站《django》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 这行代码

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

    返回 queryset

    并且您正在尝试访问它的一个字段(该字段不存在)。

    你可能需要的是

    at = AttachedInfo.objects.get(attachedMarker=m.id, title=title)
    
  • 这可能会引发错误。要妥善处理,请执行 .filter amd then [0]

  • @EsseTi 你说得对。我把过滤器改成了 get,一切都很好。真的没想到这一点。非常感谢

  • @karthikr @EsseTI,过滤后的查询集现在具有诸如 first() 和 last() 等方法,它们返回相应位置的对象。

  • 您收到错误的原因是因为 at QuerySet ,即列表。您可以执行类似操作 at[0].id 或使用 get 而不是来 filter 获取 at 对象。

    希望有帮助!

  • 我偶然发现了这一点,并尝试了过滤器,结果显示“at[0].id”:“dict”对象没有属性“id”。也许你可以改正一下?

  • 在大多数情况下,你不想处理这样的不存在的对象。而不是

    ad[0].id
    

    使用

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

    这是推荐的 Django 快捷方式

  • 我收到此错误已近两天,此错误的主要问题仅取决于两个文件,即

    模型.py 和 视图.py

    我收到此错误是因为我想从电子邮件 ID 创建会话,但它显示没有属性电子邮件,所以它没有获取任何 str 对象。

    解决方案:-

    模型.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)
    

    根据您的项目,为以下需要的数据创建一个字符串。

    视图.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})
    

    将 .first() 方法与 Model.objects 方法结合使用。这解决了我的问题,希望也能解决您的问题。

返回
作者最近主题: