SlugRelatedField中针对DRF序列化程序的特定查询集

时间:2018-05-30 11:37:25

标签: django serialization django-rest-framework

我想序列化多个对象。有一个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变量,以便我可以指定查询集吗?

1 个答案:

答案 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)