【问题标题】:I'm having an issue regarding AttributeError我遇到了关于 AttributeError 的问题
【发布时间】:2020-01-27 14:08:37
【问题描述】:
AttributeError at /addpatient_to_db
'QuerySet' object has no attribute 'wardno'

请求方法:POST

请求网址:http://127.0.0.1:8000/addpatient_to_db

Django 版本:2.2.5

异常类型:AttributeError

异常值:'QuerySet' object has no attribute 'wardno'

异常位置:C:\Users\Saurabh Patil\Desktop\SanjeevniHospital\admininterface\views.py in addpatient_to_db, line 114

Python 可执行文件:C:\Users\Saurabh Patil\AppData\Local\Programs\Python\Python37\python.exe

Python 版本:3.7.4

Python 路径:

['C:\\Users\\Saurabh Patil\\Desktop\\SanjeevniHospital',
 'C:\\Users\\Saurabh '
 'Patil\\AppData\\Local\\Programs\\Python\\Python37\\python37.zip',
 'C:\\Users\\Saurabh Patil\\AppData\\Local\\Programs\\Python\\Python37\\DLLs',
 'C:\\Users\\Saurabh Patil\\AppData\\Local\\Programs\\Python\\Python37\\lib',
 'C:\\Users\\Saurabh Patil\\AppData\\Local\\Programs\\Python\\Python37',
 'C:\\Users\\Saurabh Patil\\AppData\\Roaming\\Python\\Python37\\site-packages',
 'C:\\Users\\Saurabh '
 'Patil\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages']

服务器时间:2020 年 1 月 26 日星期日 12:07:40 +0000

这是我的代码

views.py

def addpatient_to_db(request):
    if request.method == 'POST':
        name = request.POST['name']
        age = request.POST['age']
        sex = request.POST['sex']
        address = request.POST['address']
        contno = request.POST['contno']
        wardno = request.POST['wardno']
        bedno = request.POST['bedno']
        doa = request.POST['doa']
        docass = request.POST['docass']
        pii = request.POST['pii']

        alldata = patientdetails.objects.all()

        if alldata.wardno == wardno and alldata.bedno == bedno: # <---- This is the issuing line
            return render(request, "addpatient.html")
        else:
            addp = patientdetails(name=name, age=age, sex=sex, address=address, mobno=contno,
                                  wardno=wardno, bedno=bedno, dateofallot=doa, docass=docass, illness_issue=pii)
            addp.save()
            return redirect('addpatient')
    else:
        return render(request, 'addpatient.html')

models.py

from django.db import models

# Create your models here.

class patientdetails(models.Model):
    name = models.CharField(max_length=50)
    age = models.CharField(max_length=3)
    sex = models.CharField(max_length=10)
    address = models.CharField(max_length=100)
    mobno = models.CharField(max_length=10)

    wardno = models.CharField(max_length=3)
    bedno = models.CharField(max_length=3)
    dateofallot = models.CharField(max_length=10)

    docass = models.CharField(max_length=50)
    illness_issue = models.CharField(max_length=50)

【问题讨论】:

    标签: python mysql django


    【解决方案1】:

    alldata.wardn 不起作用,因为 QuerySet 包含对象列表。如果您已经知道alldata 只包含一个对象,那么您可以使用first() ro 检索该对象:

    alldata = patientdetails.objects.first()
    

    否则,如果您在 QuerySet 中有多个对象,您可以简单地迭代 alldata

    alldata = patientdetails.objects.all()
    
    for patient in alldata: 
        if patient.wardno == wardno and patient.bedno == bedno:
            return render(request, "addpatient.html")
        else:
            addp = patientdetails(name=name, age=age, sex=sex, address=address, mobno=contno,
                                  wardno=wardno, bedno=bedno, dateofallot=doa, docass=docass, illness_issue=pii)
            addp.save()
            return redirect('addpatient')
    

    【讨论】:

      【解决方案2】:

      您正在从该行返回查询集,因此您无法访问“wardno”。

      alldata = patientdetails.objects.all()
      

      遍历整个查询集以访问它,

      alldata = patientdetails.objects.all()
      for data in alldata:
          print(data.wardno)
      

      如下优化你的代码:

      if patientdetails.objects.filter(wardno=wardno, bedno=bedno).exists():
          return render(request, "addpatient.html")
      else:
          addp = patientdetails(name=name, age=age, sex=sex, address=address, mobno=contno, wardno=wardno, bedno=bedno, dateofallot=doa, docass=docass, illness_issue=pii)
              addp.save()
              return redirect('addpatient')
      

      【讨论】:

        【解决方案3】:

        你的问题是在行

             alldata = patientdetails.objects.all()
        

        您正在使用返回多个对象的查询集,并且您无法使用多个对象来访问数据库。

        所以你应该在这里做的是遍历查询集中的每个项目,然后只访问属性

             for eachQueryset in alldata:
                 if eachQueryset.wardno == wardno and eachQueryset.bedno ==bedno:
                       return render(request, "addpatient.html")
                 else:
                      addp = patientdetails(name=name, age=age, sex=sex, 
                               address=address,mobno=contno,wardno=wardno,bedno=bedno, 
                                   dateofallot=doa, docass=docass, illness_issue=pii)
                      addp.save()
                      return redirect('addpatient')
        

        这应该可以解决您的问题

        【讨论】:

        • 对不起,我犯了一个错误,最初我遍历了所有数据,并再次使用使用过的 alldata 来查询属性。我已经做出改变,它会工作
        猜你喜欢
        • 2016-06-19
        • 2021-12-17
        • 1970-01-01
        • 2022-06-15
        • 1970-01-01
        • 2011-04-17
        • 1970-01-01
        • 2019-03-26
        • 1970-01-01
        相关资源
        最近更新 更多