gpt4 book ai didi

python - Django-REST 序列化程序 : Queryset does not filter PrimaryKeyRelatedField results

转载 作者:太空狗 更新时间:2023-10-29 20:53:38 25 4
gpt4 key购买 nike

所以我有一个看起来像这样的序列化器

class BuildingsSerializer(serializers.ModelSerializer):
masterlisting_set = serializers.PrimaryKeyRelatedField(many=True,
queryset=Masterlistings.objects.all())

效果很好

serializer = BuildingsSerializer(Buildings.objects.get(pk=1))
serializer.data

产生

OrderedDict([
("masterlistings_set", [
"0a06e3d7-87b7-4526-a877-c10f54fa5bc9",
"343643ac-681f-4597-b8f5-ff7e5be65eef",
"449a3ad2-c76c-4cb8-bb86-1be72fafcf64",
])
])

但是如果我将序列化程序中的查询集更改为

class BuildingsSerializer(serializers.ModelSerializer):
masterlistings_set = serializers.PrimaryKeyRelatedField(many=True, queryset=[])

我仍然得到完全相同的结果。

 OrderedDict([
("masterlistings_set", [
"0a06e3d7-87b7-4526-a877-c10f54fa5bc9",
"343643ac-681f-4597-b8f5-ff7e5be65eef",
"449a3ad2-c76c-4cb8-bb86-1be72fafcf64",
])
])

这应该发生吗?我是否错误地使用了查询集?我用 [] 作为一个简单的例子来表明无论我输入什么都不会改变。

请任何见解都是无价的

需要注意的是,masterlistings有一个指向建筑物的主键关系。因此,Masterlisting 属于建筑物。

最佳答案

正如@zymud 所指出的,PrimaryKeyRelatedField 中的查询集参数用于验证用于创建新条目的字段输入。过滤掉 masterlistings_set 的另一种解决方案是使用 serializers.SerializerMethodField() 如下:

class BuildingsSerializer(serializers.ModelSerializer):
masterlisting_set = serializers.SerializerMethodField()

def get_masterlisting_set(self, obj):
return MasterListing.objects.filter(building=obj).values_list('pk',flat=True)

关于python - Django-REST 序列化程序 : Queryset does not filter PrimaryKeyRelatedField results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36755755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com