python - 如何将数据计算出的模型字段添加到其他模型中?

标签 python django django-rest-framework

我有以下型号:

# 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/

相关文章:

Python 3.3内部嵌套While循环不输出

python - 这个类看起来很愚蠢吗?

django - 反转多对多关系

Django:具有 blank=True、null=True、unique=True 的模型字段给管理员带来麻烦

python - 如何在 Django 中模拟 View 装饰器

django - 我如何自动填充我的字段并使其在 django 管理站点中不可编辑

python - 个性洞察 - 分析不同用户的评论

python - 禁用索引 Pandas 数据框

Python Celery - 如何在其他任务中调用 celery 任务

python - 删除多对多关系的成员 Django Rest Framework