【发布时间】:2021-04-28 10:38:51
【问题描述】:
我有以下格式的序列化程序:
CounterPartyCompanySerializer:
class CounterPartyCompanySerializer(serializers.ModelSerializer):
class Meta:
model = ClientCompany
fields = (
"id",
"company_name",
"address_line1",
)
extra_kwargs = {
"id": {
"read_only": False,
"required": False,
},
}
CounterPartySerializer:
class CounterPartySerializer(serializers.ModelSerializer):
company = CounterPartyCompanySerializer()
class Meta:
model = Client
fields = (
"id",
"company",
"client_name",
)
extra_kwargs = {
"id": {
"read_only": False,
"required": False,
},
}
和 GiftAndEntertainmentSerializer:
class GiftAndEntertainmentSerializer(serializers.ModelSerializer):
counter_party = CounterPartySerializer()
class Meta:
model = GiftAndEntertainment
fields = (
"id",
"counter_party",
"value",
)
Case-I :: 当我执行以下操作时它会起作用:
result_list = GiftAndEntertainment.objects.all()
serializer = GiftAndEntertainmentSerializer(
result_list, many=True, context={"request": request}
)
但是,当我传递自定义查询集时它不起作用:
result_list = GiftAndEntertainment.objects.values(
"counter_party",
"value"
).annotate(
total=ExpressionWrapper(Sum("value"), output_field=DecimalField())
)
serializer = GiftAndEntertainmentSerializer(
result_list, many=True, context={"request": request}
)
这里,"counter_party" 是 ForeignKey 映射实体,查询集通过 counter_party 实体的 primary-key id。我认为序列化程序会将 pk 转换为其相应的实体,就像它在 case-I 中所做的那样,但这不会自动发生。这里的任何帮助都会挽救我的生命。我花了一整天的时间试图实现这一目标,但每次都失败了。
【问题讨论】:
标签: python django serialization django-rest-framework