django - 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
以便指定查询集吗?
解决方案
经过进一步搜索,我找到了一个似乎在这里工作的解决方案。
我所做的是将它添加到序列化程序中:
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)
推荐阅读
- javascript - node.js / javascript 应用程序是否支持 AES 密文窃取?
- discord - Discord py - 在“on_raw_reaction_add”函数中创建某个类别的频道?
- vb.net - 如何解析 XML 而不会对文件中的注释抛出异常
- javascript - 为什么我只在 Javascript 计算器中的减号运算符中看到 NaN?
- css - 如何降低标签的高度 - 棱角材料
- c++ - 如何旋转 AVFrame?
- typescript - 单击事件返回未定义。为什么?
- c# - SignalR Core 和接收消息
- storyboard - 在swift5中按下特定按钮时如何使用代码呈现tabBarViewController(在情节提要中创建)?
- markdown - Markdown/Hugo 帮助:如何定义一个包含项目符号的字符串?