编辑: 我当然需要一个student_count字段,因为我应该将此模型用于REST API。如果您可以告诉我如何在不添加模型的情况下在序列化程序中添加字段,我也会这样做。
这是我的模特:
class Course(models.Model):
student_count = models.PositiveIntegerField(default=0)
students = models.ManyToManyField()
我尝试做的是以下但它不起作用。
Course.objects.update(student_count=F('students__count'))
以下作品但不理想
courses = Course.objects.all()
for course in courses:
course.student_count = course.students.count()
course.save()
return Course.objects.all()
答案 0 :(得分:2)
尝试按以下方式添加/更新序列化程序,
from django.db.models import Count
class CourseSerializer(serializers.ModelSerializer):
count = serializers.SerializerMethodField(read_only=True)
def get_count(self, model):
return model.students.aggregate(count=Count('id'))['count']
class Meta:
model = Course
fields = ('count',)
您可以更快地使用聚合Count()
方法而不是queryset.count()
方法。阅读此SO帖子,aggregate(Count()) vs queryset.count()