我正在尝试通过它的名称字段过滤manytomany字段,但我无法正确设置它。任何人都可以看看这个吗?
模型
class Criteria(models.Model):
name = models.CharField(max_length=400, primary_key=True)
tests = models.ManyToManyField(Test)
class Test(models.Model):
name = models.CharField(max_length=4000)
视图
class CriteriaViewSet(DefaultsMixin, viewsets.ModelViewSet):
queryset = Criteria.objects.all()
filter_class = CriteriaFilter
filter_fields = ('tests',)
def get_serializer_class(self):
if self.action == 'list':
return CriteriaSerializer
return CriteriaDetailSerializer
Filterset
class CriteriaFilter(django_filters.FilterSet):
test = django_filters.CharFilter(name="tests__name", lookup_type='contains')
class Meta:
model = Criteria
fields = ('tests',)
串行器
class CriteriaSerializer(serializers.ModelSerializer):
tests = serializers.StringRelatedField(many=True)
links = serializers.SerializerMethodField()
class Meta:
model = Criteria
fields = ('name', 'tests', 'links')
def get_links(self, obj):
request = self.context['request']
return {
'self': reverse('api:criterium-detail',
kwargs={'pk': obj.pk},
request=request),
}
使用上面的配置,我在URL上获得了:
/ API /标准/?测试= FB1400
是空结果数组,即使有许多Criteria包含已解决的测试:
HTTP 200 OK Content-Type: application/json Vary: Accept Allow: GET, POST, HEAD, OPTIONS
{
"count": 0,
"next": null,
"previous": null,
"results": []
}
我在fields
尝试了不同的查找(精确,在,包含)以及不同的值,但这些都不适用于我...
我也想知道我是否应该在某处设置django过滤后端,但我不知道该怎么做,我不知道在这种情况下是否有必要。
答案 0 :(得分:0)
不确定你是否解决了这个问题,但这篇文章与其他文章类似,后来解决了这个问题:
Django Rest Framework (GET filter on ManyToMany field)
希望这有帮助。