[英]How to get values from ForeignKey's related model in Django queryset?
我在使用外鍵訪問相關模型中的字段時遇到問題。
我有以下兩個模型,“人”和“聚會”:
class Person(models.Model):
title = models.CharField(max_length = 4, blank=True, null=True)
first = models.CharField(max_length = 30, blank=True, null=True)
last = models.CharField(max_length = 30, blank=True, null=True)
party = models.ForeignKey(Party, related_name = 'parties', on_delete=models.CASCADE, blank=True, null=True)
def __str__(self):
return self.id
class Party(models.Model):
party_name = models.CharField(max_length = 50)
party_code = models.CharField(max_length = 5)
def __str__(self):
return self.party_name
我正在努力統計每方的人數。 我希望結果看起來像:
[{
"party_name": "Democrat",
"total_members": 93
},
{
"party_name": "Republican",
"total_members": 32
},
{
"party_name": "Non-Partisan",
"total_members": 34
}]
我的序列化器如下:
class CountPartiesSerializer(serializers.ModelSerializer):
total_members = serializers.IntegerField()
class Meta:
model = Person
fields = ('id', 'party', 'total_members')
我的觀點如下:
class CountPartiesViewSet(DefaultsMixin, viewsets.ModelViewSet):
queryset = Person.objects.values('party__party_name').annotate(total_members = Count('id'))
serializer_class = CountPartiesSerializer
但這導致以下結果:
[{
"party": null,
"total_members": 34
},
{
"party": null,
"total_members": 93
},
{
"party": null,
"total_members": 32
}]
我已經嘗試了上百萬種不同的方法,但我知道我缺少某些東西,但是我不知道如何使它起作用。 任何建議將不勝感激!
您正在序列化錯誤的內容。 您的序列化器應基於Party,然后您可以添加成員數。
編輯
class PartySerializer(serializers.ModelSerializer):
total_members = serializers.IntegerField()
class Meta:
model = Party
fields = ('name', 'total_members')
class PartyViewSet(DefaultsMixin, viewsets.ModelViewSet):
queryset = Party.objects.values('name').annotate(total_members=Count('parties'))
serializer_class = PartySerializer
當然,您確實在聚會和個人之間存在關系:這是外鍵的反向關系。 注意,您為related_name選擇的名稱令人困惑; 它應該是“ people”,或者將其保留為默認值,即“ person_set”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.