python-3.x - DjangoRestAPI 过滤列表字段
问题描述
在我的 DjangoRestAPI 项目中,我有 2 个这样的序列化器:
序列化程序.py
class TagSerializer(serializers.ModelSerializer):
class Meta:
model = Tags
fields = ['tagkey', 'tagval']
def create(self, validated_data):
return Tags.objects.create(**validated_data)
def update(self, instance, validated_data):
instance.tagkey = validated_data.get('tagkey', instance.tagkey)
instance.tagval = validated_data.get('tagval', instance.tagval)
instance.save()
return instance
class ModvarSerializer(serializers.ModelSerializer):
owner = serializers.ReadOnlyField(source='owner.username')
var_group = VarGroupSerializer(read_only=True)
tag_var = TagSerializer(read_only=True, many=True)
class Meta:
model = ModbusVariable
fields = ['id', 'short_name', 'uom', 'var_group', 'unit', 'writeable', 'value_class', 'address', 'bit_count', 'min_type','max_type', 'byte_order','function_code_read', 'is_quarterly', 'tag_var', 'owner']
def create(self, validated_data):
...
现在在我的views.py中,我必须为tag_var值创建一个带有过滤器的ModVar列表:
视图.py
class ModvarsList(generics.ListCreateAPIView):
queryset = ModbusVariable.objects.using(random.choice(replica_list)).all()
serializer_class = ModvarSerializer
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
pagination_class = StandardResultsSetPagination
# paginator = None
filter_backends = [DjangoFilterBackend]
filterset_fields = {
'unit__port_id__master_id': ['exact'],
'unit__port_id__master_id__short_name': ['exact'],
'is_quarterly': ['exact'],
'tag_var': ['exact']
}
search_fields = ['unit__port_id__master_id', 'unit__port_id__master_id__short_name', 'is_quarterly']
ordering_fields = '__all__'
所以如果我在没有过滤器的情况下运行我的 API 调用,我会得到以下结果:
但是,如果我尝试使用例如 tag_var="tagkey: site1" 或仅使用 "site1" 进行过滤,我会收到错误消息
tag_var 过滤器的值不正确
如何仅公开 tag_val 值的“键”和“值”字段以根据我的 API 结果的值进行过滤?
非常感谢曼努埃尔
解决方案
推荐阅读
- android - Android 模拟器无法在 AMD Ryzen 2400G 上运行
- java - JSP 中的 Java PropertyNotFoundException
- java - 使用 Selenium/Katalon (Java) 打开并阅读具有特定标题的电子邮件文本(来自 Gmail)
- gnuplot - Gnuplot 图像到电影:闪烁效果
- ios - 如果 SuperView 中的 UITextField 是活动响应者,则 UIControl 不会调用事件处理程序
- django - 如何在 django 2.0 中设置注册和信号
- java - Android - 使用类似于 @SerializedName 的内容注释 Retrofit2 POST / PATCH 请求正文
- java - HTTP 状态 500 - 实例化 servlet 类 com.sar.pkg.MyServlet 时出错
- paypal - 缺少基本参数
- vb.net - 使用 Visual Basic,我需要在 for next 循环中添加什么以使我的应用程序仅显示偶数?