Django 如何筛选空列表?多对多关系
我的筛选如下:Django 如何筛选空列表?多对多关系,django,django-rest-framework,Django,Django Rest Framework,我的筛选如下: queryset = queryset.prefetch_related( Prefetch('level', queryset=Level.objects.filter(id=level))) 在这种情况下,将保留空列表: { ... "level": [] ... }, { ... "level": [ 2 ] ... } 我试着这样过滤:
queryset = queryset.prefetch_related(
Prefetch('level', queryset=Level.objects.filter(id=level)))
在这种情况下,将保留空列表:
{
...
"level": []
...
},
{
...
"level": [
2
]
...
}
我试着这样过滤:
queryset = queryset.prefetch_related(
Prefetch('level',queryset=Level.objects.filter(id=level).exclude(id__isnull=True)))
但这没用
我还想知道是否有可能在没有列表的情况下得到一个值
{
...
"level": 2
...
}
您不应该在
预取
对象上进行筛选,因为这样做“太”晚了。然后过滤掉元素。您应该使用以下内容过滤queryset
:
queryset.filter(level=level).prefetch_related(
Prefetch('level', queryset=Level.objects.filter(id=level)))
)
然后在序列化程序中,您可以使用一个整型字段
,例如,它取source='level\u值'
:
从rest_框架导入序列化程序
class MyModelSerializer(serializers.ModelSerializer)
level = IntegerField(source='level_value')
class Meta:
model = MyModel
类MyModelSerializer(serializers.ModelSerializer)
级别=整数字段(source='level\u value')
类元:
型号=我的型号
class MyModelSerializer(serializers.ModelSerializer)
level = IntegerField(source='level_value')
class Meta:
model = MyModel