我有一个关于属性错误的问题

2024-09-20 04:11:19 发布

您现在位置:Python中文网/ 问答频道 /正文

AttributeError at /addpatient_to_db
'QuerySet' object has no attribute 'wardno'

申请方式:邮寄

请求URL: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']

服务器时间:Sun,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)

Tags: modelsrequestlocalpostlengthusersappdatamax
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.wardn不起作用,因为是包含对象列表的QuerySet。如果您已经知道alldata只包含一个对象,则可以使用first()检索该对象:

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

您正在从此行返回queryset,因此无法访问“wardno”

alldata = patientdetails.objects.all()

在queryset中循环以访问它

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

相关问题 更多 >