我在遇到有关AttributeError的问题

问题描述 投票:1回答:3
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
3个回答
0
投票

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

0
投票

您正在从此行返回查询集,因此无法访问'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')

0
投票

您的问题在第

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

这应该可以解决您的问题

© www.soinside.com 2019 - 2024. All rights reserved.