首页 > 解决方案 > SlugRelatedField 中用于 DRF 序列化程序的特定查询集

问题描述

我想序列化多个对象。对“描述符”有一个 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以便指定查询集吗?

标签: djangoserializationdjango-rest-framework

解决方案


经过进一步搜索,我找到了一个似乎在这里工作的解决方案。

我所做的是将它添加到序列化程序中:

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)

推荐阅读