Django 如何获取父序列化程序中的子级总数
我想在父(票证计数器)序列化程序中显示与票证计数器关联的工人总数 以下是两个序列化程序:Django 如何获取父序列化程序中的子级总数,django,django-rest-framework,django-serializer,Django,Django Rest Framework,Django Serializer,我想在父(票证计数器)序列化程序中显示与票证计数器关联的工人总数 以下是两个序列化程序: class TicketCounterSerializer(serializers.ModelSerializer): workers = WorkerToCounterSerializer(many=True, read_only=True) class Meta: model = TicketCounter fields = ( 'ticke
class TicketCounterSerializer(serializers.ModelSerializer):
workers = WorkerToCounterSerializer(many=True, read_only=True)
class Meta:
model = TicketCounter
fields = (
'ticket_counter_name',
'ticket_counter_description',
'ticket_counter_address',
'workers',
)
class WorkerToCounterSerializer(serializers.ModelSerializer):
class Meta:
model = WorkerToTicketCounter
fields = (
'user',
'ticket_counter',
'worker',
)
型号:
class TicketCounter(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
ticket_counter_name = models.CharField(max_length=100, default="")
ticket_counter_description = models.CharField(max_length=1500, default="")
ticket_counter_address = models.CharField(max_length=1500, default="")
class WorkerToTicketCounter(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
ticket_counter = models.ForeignKey(TicketCounter,related_name="workers")
worker = models.ForeignKey(User,related_name='worker_for_ticket_counter')
以下是我获得结果的方式:
{
"ticket_counter_name": "First",
"ticket_counter_description": "firsty",
"ticket_counter_address": "222fdssssss",
"workers": [
{
"user": 1,
"ticket_counter": 3,
"worker": 4,
},
{
"user": 1,
"ticket_counter": 3,
"worker": 5,
},
]
}
这是我想要的
{
"ticket_counter_name": "First",
"ticket_counter_description": "firsty",
"ticket_counter_address": "222fdssssss",
"workers": 2 # just the total count
}
如何只显示总计数 您可以使用注释执行此操作,并将其序列化为整型字段
,如:
class TicketCounterSerializer(serializers.ModelSerializer):
num_workers = serializers.IntegerField()
class Meta:
model = TicketCounter
fields = (
'ticket_counter_name',
'ticket_counter_description',
'ticket_counter_address',
'num_workers',
)
因此,我们使用包含相关WorkerToTicketCounter
对象数量的属性num\u workers
对每个TicketCounter
对象进行注释
然而,就我个人而言,我认为这个模型有一些奇怪的名字:
TicketCounter
看起来并不像一个计数器。虽然我不知道您的应用程序的全部范围,但我认为名为Ticket
和Worker
的模型可能更有意义。我没有使用ModelViewSet。我只是在使用ListApiView
@Naroju:两者的界面大致相同,因此将ModelViewSet
替换为ListApiView
:)我可以知道计数中的“工人”是多少吗?这是你的名字吗?计数问题还没有解决。我们需要导入Count
?@Naroju:这是相关的名称,导入语句位于代码片段的顶部。请您看看这个问题好吗
from django.db.models import Count
class TicketCounterViewSet(viewsets.ListApiView):
queryset = TicketCounter.objects.annotate(num_workers=Count('workers'))
serializer_class = TicketCounterSerializer