我想序列化多个对象。有一个SlugRelatedField到“描述符”,它在一个项目中有唯一的名称,但在不同的项目中可能出现相同的名称。
在我的序列化程序中使用此行:
row = serializers.SlugRelatedField(slug_field="name",
queryset=Descriptor.objects.all() )
导致错误,因为返回了多个描述符。我需要这样的东西:
row = serializers.SlugRelatedField(slug_field="name",
queryset=Descriptor.objects.filter(project=projectid))
验证后会导致NameError: name 'projectid' is not defined
。
我可以在调用projectid
方法时传递is_valid
变量,以便我可以指定查询集吗?
答案 0 :(得分:0)
进一步搜索后,我找到了一个似乎有效的解决方案here。
我做的是将其添加到序列化程序中:
def get_fields(self, *args, **kwargs):
fields = super(CellCESaveSerializer, self).get_fields(*args, **kwargs)
fields['row'].queryset = Descriptor.objects.filter(project=self.context['id'])
return fields
并通过上下文移交项目的ID
serializer = CellCESaveSerializer(Cells, data=data,many=True, context = {'id':id, 'descriptoridlist' : descriptoridlist}, partial=True)