仅更新特定字段

时间:2019-09-02 16:08:35

标签: 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,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)

我收到此错误

“方法”对象不可下标

4 个答案:

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