一、数据准备
模型类
class UserInfo(models.Model):name = models.CharField(max_length=20, verbose_name='用户名')pwd = models.CharField(max_length=18, verbose_name='密码')email = models.EmailField(max_length=40, verbose_name='邮箱')age = models.IntegerField(verbose_name='年龄', default=18)def __str__(self):return self.nameclass Meta:db_table = 't_user'# 模型Addr关联userinfo, class Addr(models.Model):user = models.ForeignKey('UserInfo', verbose_name='所属用户', on_delete=models.CASCADE)mobile = models.CharField(verbose_name='手机号', max_length=18)city = models.CharField(verbose_name='城市', max_length=10)info = models.CharField(verbose_name='详细地址', max_length=200)def __str__(self):return self.infoclass Meta:db_table = 't_address'
序列化器类
class UserInfoSerializer(serializers.ModelSerializer):class Meta:model = UserInfofields = '__all__'class AddrSerializer(serializers.ModelSerializer):class Meta:model = Addrfields = '__all__'
视图类
class UserView(ModelViewSet):# 指定模型类查询集queryset = UserInfo.objects.all()# 指定序列化器类serializer_class = UserInfoSerializerclass AddrView(ModelViewSet):# 指定模型类查询集queryset = Addr.objects.all()# 指定序列化器类serializer_class = AddrSerializer
二、相关配置
对于列表数据可能需要根据字段进行过滤,我们可以通过添加django-fitlter扩展来增强支持
pip install django-filter -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
在配置文件中增加过滤后端的设置
# 注册应用, INSTALLED_APPS = [...'django_filters', ] # 指定过滤器 REST_FRAMEWORK = {'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',) }
三、过滤器的基本使用
在视图中添加filterset_fields属性,指定可以过滤的字段
class UserView(ModelViewSet):# 指定模型类查询集queryset = UserInfo.objects.all()# 指定序列化器类serializer_class = UserInfoSerializerfilterset_fields = ('name', 'email',)
指定过滤字段之前
指定过滤字段之后