//views
def newEnroll(request):
GradeYear = request.POST.get['customers']
payment = request.POST.get['paymentID']
pending = "Enrolled"
update = StudentUser.objects.filter(PaymentTypes=payment,pending=pending,Grade_Year=GradeYear)
update.Grade_Year = ([GradeYear])
update.PaymentTypes = ([payment])
update.Request = ([pending])
return render(request, 'accounts/pending.html')
//model
class StudentUser(models.Model):
Grade_Year = models.CharField(max_length=500, null=True, blank=True)
Subjects = models.CharField(max_length=500, null=True, blank=True)
SectionID = models.ForeignKey(Section, related_name='+', on_delete=models.CASCADE, null=True, blank=True)
CourseID = models.CharField(max_length=500, null=True, blank=True)
PaymentTypes = models.CharField(max_length=500, null=True, blank=True)
RoomID = models.ForeignKey(Room, related_name='+', on_delete=models.CASCADE, null=True, blank=True)
Request = models.CharField(max_length=500, null=True, choices=Pending_Request,blank=True)
我收到此错误
“方法”对象不可下标
答案 0 :(得分:1)
更改
update = StudentUser.objects.filter(PaymentTypes=payment,pending=pending,Grade_Year=GradeYear)
到
update = StudentUser.objects.filter(PaymentTypes=payment,pending=pending,Grade_Year=GradeYear)[0]
过滤器返回一个列表,您需要在过滤器的最后添加[0]才能从列表中获取第一个对象
答案 1 :(得分:0)
您在filter()和get()之间感到困惑。当您使用filter()时,它将返回给您一个可迭代的查询集,您可以使用该查询集进行相应的更新。另一方面,get()返回所需的对象,可以通过创建的变量对其进行访问。
如果使用filter(),则通常在期望多个符合条件的对象时执行此操作。如果找不到符合您条件的项目,则filter()返回一个空查询集,而不会引发错误。
如果使用get(),则期望有一个(并且只有一个)符合您的条件的项目。如果该项目不存在或存在多个符合您的条件的项目,则Get引发错误。因此,应始终在try ..(除..块之外)或与get_object_or_404之类的快捷功能一起使用,以便正确处理异常。
示例
q = SomeModel.objects.filter(name="Donald Trump")
print (q) -> [QuerySet1, QuerySet2, QuerySet3]
q = SomeModel.objects.get(pk=1)
print (q) -> [QuerySet object ... pk=1]
注意:从get()获得的内容是不可迭代的,而从filter()获得的则是可迭代的,必须进行迭代才能获得所需的对象。
答案 2 :(得分:0)
//views
def newEnroll(request):
GradeYear = request.POST.get['customers']
payment = request.POST.get['paymentID']
pending = "Enrolled"
update = StudentUser.objects.filter(PaymentTypes=payment,pending=pending,Grade_Year=GradeYear)[0]
update.Grade_Year = GradeYear
update.PaymentTypes = payment
update.Request = pending
update.save()
return render(request, 'accounts/pending.html')
尝试一下
答案 3 :(得分:0)
//views
def newEnroll(request):
GradeYear = request.POST.get['customers'] //let GradeYear is 3
payment = request.POST.get['paymentID'] // payment is 100
pending = "Enrolled"
update = StudentUser.objects.filter(PaymentTypes=payment,pending=pending,Grade_Year=GradeYear)[0]
//StudentUser.objects.filter(PaymentTypes=100,pending="Enrolled",Grade_Year=3)[0] will not give error if there is a StudentUser object in model with PaymentTypes=100,pending="Enrolled",Grade_Year=3
update.Grade_Year = GradeYear
update.PaymentTypes = payment
update.Request = pending
update.save()
return render(request, 'accounts/pending.html')