在Django Rest Framework中,要将用户名添加到视图的filterset_fields中,需要进行以下步骤:
MyModel
,用户字段名为user
,外键指向Django的内置用户模型User
,你的模型定义可能如下所示:from django.db import models
from django.contrib.auth.models import User
class MyModel(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
# 其他字段...
FilterSet
类来创建一个过滤器集。你可以通过继承rest_framework.filters.FilterSet
来创建自定义的过滤器集。在过滤器集中,你可以指定要过滤的字段以及过滤器的行为。在这个例子中,我们将使用django_filters
库来创建过滤器集。首先,确保你已经安装了django_filters
库:pip install django_filters
然后,创建一个名为filters.py
的文件,并添加以下内容:
import django_filters
from .models import MyModel
class MyModelFilter(django_filters.FilterSet):
username = django_filters.CharFilter(field_name='user__username')
class Meta:
model = MyModel
fields = ['username']
在上面的代码中,我们定义了一个名为username
的过滤器,它将过滤user
字段的username
属性。field_name
参数指定了要过滤的字段路径。
MyModelViewSet
,你可以按照以下方式应用过滤器集:from rest_framework import viewsets
from .models import MyModel
from .filters import MyModelFilter
class MyModelViewSet(viewsets.ModelViewSet):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
filterset_class = MyModelFilter
在上面的代码中,我们将过滤器集MyModelFilter
应用到视图类中的filterset_class
属性。
现在,你可以使用username
作为过滤器字段来过滤视图中的数据。例如,通过访问/mymodels?username=testuser
,你可以获取user
字段的username
属性为testuser
的所有对象。
这是一个基本的示例,你可以根据自己的需求进行更多的定制和扩展。关于Django Rest Framework的过滤器集和过滤器的更多信息,请参考官方文档:Filters。
领取专属 10元无门槛券
手把手带您无忧上云