Django 仅更新特定字段
我犯了这个错误Django 仅更新特定字段,django,Django,我犯了这个错误 “方法”对象不可下标更改 //views def newEnroll(request): GradeYear = request.POST.get['customers'] payment = request.POST.get['paymentID'] pending = "Enrolled" update = StudentUser.objects.filter(PaymentTypes=payment,pending=pending,Grad
“方法”对象不可下标更改
//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)
到
filter返回一个列表,您需要在filter的最后一个中添加[0]以从列表中获取第一个对象您混淆了filter和get。当您使用过滤器时,它会返回一个iterable查询集,您可以使用它进行相应的更新。另一方面,get返回所需的对象,可以通过您创建的变量访问该对象 如果您使用过滤器,通常在您希望多个对象符合您的条件时执行此操作。如果未找到与您的条件匹配的项,筛选器将返回am empty queryset,而不会引发错误 如果使用get,则期望一个且仅一个符合条件的项。如果项不存在或存在多个与您的条件匹配的项,Get将抛出错误。因此,在尝试中,您应该始终使用if。。除了为正确处理异常,请使用诸如get_object_或_404之类的快捷功能阻止或 例子
update = StudentUser.objects.filter(PaymentTypes=payment,pending=pending,Grade_Year=GradeYear)[0]
注意:从get得到的不是iterable,从filter得到的是iterable,必须迭代才能得到所需的对象
q = SomeModel.objects.get(pk=1)
print (q) -> [QuerySet object ... pk=1]
试试这个thak you,但是它不起作用。请求的结果是什么。POST.get['customers']?'QuerySet'对象没有属性'save'是的,你需要添加update.save in last,为什么要写update.Grade_Year=[GradeYear],你不能在对象的字段中保存列表'method'对象不是subscriptableoh,我的错了。你需要使用而不是[]request.POST.get'customers'和request.POST.get'paymentID'没问题,顺便说一句,我遇到了另一个错误,列表索引超出范围太好了,代码工作正常,StudentUser.objects.filter返回一个空列表,我在查询的最后一个位置放了[0],这就是为什么错误是列表索引超出范围你的方法错误,首先,您使用一些凭据筛选StudentUser,然后在StudentUseru中更新相同的凭据。您可以执行StudentUser.objects.getid=1而不是StudentUser.objects.filter[0],这将调用StudentUser的第一个对象并更新它,请尝试此操作。id将是StudentUser对象的id我现在就知道了,非常感谢:欢迎:。
//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')
q = SomeModel.objects.get(pk=1)
print (q) -> [QuerySet object ... pk=1]
//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')
//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')