我有以下型号:
# models.py
class Test(models.Model):
name = models.CharField(max_length=40)
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
class Tester(models.Model):
test_id = models.ForeignKey(Test, on_delete=models.DO_NOTHING)
class TestViewset(viewsets.ModelViewSet):
serializer_class = TestSerializers
permission_classes = (permissions.IsAuthenticated,)
def get_queryset(self):
if self.request.user.is_superuser:
return Test.objects.all()
else:
return Test.objects.filter(author=self.request.user)
因此每个测试可以由许多测试人员进行。
我的愿望是计算有多少测试人员进行了测试,即当我向 TestViewset
发出 GET 请求时,我希望除了当前字段 [name ,作者]一个计数字段,对于每个测试,指定已测试了多少测试人员。
感谢您的帮助!
最佳答案
您可以在 View 级别上注释计数:
from django.db.models import Count
def get_queryset(self):
if self.request.user.is_superuser:
return Test.objects.all().annotate(count=Count("tester"))
在序列化器级别,您可以使用 SerializerMethodField
来呈现此值:
class TestSerializers:
count = serializers.SerializerMethodField()
def get_count(self, obj):
if hasattr(obj, "count"):
return obj.count
关于python - 如何将数据计算出的模型字段添加到其他模型中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60209954/