Python 在视图上更新queryset而不实际更新数据库

Python 在视图上更新queryset而不实际更新数据库,python,django,django-queryset,django-orm,Python,Django,Django Queryset,Django Orm,我正在尝试向我的用户查询集添加一个字段“grade”。我有3个模型:用户、科目和考试。我不认为有一种方法可以计算初始查询的用户等级,如: Users.objects.get(pk=x).annotate(grade=z) 因为我必须调用Subject模型的方法来计算该用户在该科目上的总成绩,而不仅仅是1次考试的成绩(请参见模型描述中下面的方法) 在我看来,我做到了: user_obj = Users.object.get(pk=x).annotate(grade=Value(0, Intege

我正在尝试向我的用户查询集添加一个字段“grade”。我有3个模型:用户、科目和考试。我不认为有一种方法可以计算初始查询的用户等级,如:

Users.objects.get(pk=x).annotate(grade=z)
因为我必须调用Subject模型的方法来计算该用户在该科目上的总成绩,而不仅仅是1次考试的成绩(请参见模型描述中下面的方法)

在我看来,我做到了:

user_obj = Users.object.get(pk=x).annotate(grade=Value(0, IntegerField()))
calculated_grade = subject.calculate_user_grade(user_obj)
user_obj.grade = calculated_grade
然后将用户_obj传递给模板。但一旦它到达那里,我修改的成绩字段就已经消失了。我在视图上打印“user_obj.grade”,它给出了正确的值,然后我在模板上打印它,它给了我0,“annotate”的初始值

我使用的模型是django中的默认用户模型,然后

class Subject(models.Model):
    name = models.CharField()

    def calculate_user_grade(self, user):
        points = 0
        exams = Exam.objects.filter(subject=self)
        for exam in exams:
            user_answer = ExamUser.objects.get(user=user, exam=exam)
            points += user_answer.points
        return points

class Exam(models.Model):
    subject = models.ForeignKey(Subject)
    question = models.CharField()

class ExamUser(models.Model):
    exam = models.ForeignKey(Exam)
    user = models.ForeignKey(User)
    points = models.PositiveIntegerField(default=0)


好问题。根据您的问题和代码,问题可能是从
视图
模板
解析未保存的对象

简单的回答是使用
字典
,而不是解析未保存的
对象

user_obj = Users.object.get(pk=x)
calculated_grade = subject.calculate_user_grade(user_obj)
user_dict = dict(user_obj)
user_dict.setdefault('grade', calculated_grade)

然后将
用户dict
解析为模板。

一个好问题。根据您的问题和代码,问题可能是从
视图
模板
解析未保存的对象

简单的回答是使用
字典
,而不是解析未保存的
对象

user_obj = Users.object.get(pk=x)
calculated_grade = subject.calculate_user_grade(user_obj)
user_dict = dict(user_obj)
user_dict.setdefault('grade', calculated_grade)

然后将
user\u dict
解析到模板中。

如何将
user\u obj
传递到模板中?您可以显示更多视图吗?如何将
user\u obj
传递到模板?你能再多看一点吗?