【发布时间】:2017-01-15 01:21:39
【问题描述】:
我有两个模型,一个定义用户,另一个定义这些用户的标签。我正在使用 Django REST Framework 来创建 API。我希望能够查询至少包含标签 id 1 和 2 的用户。
例如,如果用户的标签是:
[(1,2), (1,2,3), (2,3), (1,3)]我要查询返回
[(1,2), (1,2,3)].
到目前为止,我已经设法通过以下方式查询具有给定标签(假设 id=1)的用户:/api/users/?labels=1,但我无法查询具有标签 1 和 2 的用户。我尝试过 @987654325 @ 或 /api/users/?labels=1&labels=2 但它返回一些无效用户,即没有标签 1 或 2 的用户...
Github 测试仓库:
https://github.com/TheDimLebowski/drf-m2m-filter
代码:
models.py
>class Label(models.Model):
name = models.CharField(max_length = 60)
class User(models.Model):
labels = models.ManyToManyField(Label)
filters.py
>class UserFilter(django_filters.FilterSet):
labels = django_filters.filters.BaseInFilter(
name='labels',
lookup_type='in',
)
class Meta:
model = User
fields = ('labels',)
serializers.py
>class LabelSerializer(serializers.ModelSerializer):
class Meta:
model = Label
fields = ('id','name')
class UserSerializer(serializers.ModelSerializer):
labels = LabelSerializer(many = True)
class Meta:
model = User
fields = ('labels',)
views.py
>class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
filter_backends = (filters.DjangoFilterBackend,)
filter_class = UserFilter
filter_fields = ('labels',)
【问题讨论】:
标签: django many-to-many django-rest-framework