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