Cha*_*aro 9 python django serialization django-rest-framework
所以我有一个看起来像这样的序列化器
class BuildingsSerializer(serializers.ModelSerializer):
masterlisting_set = serializers.PrimaryKeyRelatedField(many=True,
queryset=Masterlistings.objects.all())
Run Code Online (Sandbox Code Playgroud)
它很棒
serializer = BuildingsSerializer(Buildings.objects.get(pk=1))
serializer.data
Run Code Online (Sandbox Code Playgroud)
产生
OrderedDict([
("masterlistings_set", [
"0a06e3d7-87b7-4526-a877-c10f54fa5bc9",
"343643ac-681f-4597-b8f5-ff7e5be65eef",
"449a3ad2-c76c-4cb8-bb86-1be72fafcf64",
])
])
Run Code Online (Sandbox Code Playgroud)
但是,如果我将序列化程序中的查询集更改为
class BuildingsSerializer(serializers.ModelSerializer):
masterlistings_set = serializers.PrimaryKeyRelatedField(many=True, queryset=[])
Run Code Online (Sandbox Code Playgroud)
我仍然得到相同的结果.
OrderedDict([
("masterlistings_set", [
"0a06e3d7-87b7-4526-a877-c10f54fa5bc9",
"343643ac-681f-4597-b8f5-ff7e5be65eef",
"449a3ad2-c76c-4cb8-bb86-1be72fafcf64",
])
])
Run Code Online (Sandbox Code Playgroud)
这应该发生吗?我错误地使用了查询集吗?我用[]作为一个简单的例子来表明,无论我什么都没有改变.
请有任何见解是非常宝贵的
应该注意的是,主列表具有指向建筑物的主键关系.所以一个主人名单属于一个建筑物.
正如@zymud所指出的,PrimaryKeyRelatedField中的queryset参数用于验证字段输入以创建新条目.过滤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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1463 次 |
最近记录: |