python - 如何获取模型中所有属性的列表 - Django Rest Framework
问题描述
我正在尝试获取所有名称、电子邮件和电话的列表,而无需为每个名称、电子邮件和电话编写类似的类。有没有办法为此目的编写一个通用类?我有意识地使用了 APIView 和 Serializer(而不是 ModelSerializer)。这是我的代码。
视图.py
class userInfoList(APIView):
def get(self, request, format=None):
users = userInfo.objects.all()
serializer = userInfoSerializer(users, many=True)
return Response(serializer.data)
序列化程序.py
from phonenumber_field.serializerfields import PhoneNumberField
from rest_framework import serializers
from .models import userInfo
class userInfoSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
name = serializers.CharField(max_length=50)
email = serializers.EmailField(max_length=70)
phone = PhoneNumberField()
def create(self, validated_data):
return userInfo.objects.create(**validated_data)
解决方案
看看 DRF 中的通用视图 - https://www.django-rest-framework.org/api-guide/generic-views/
可以为 a 定义 a serializer_class
,generic.ListView
因此您可以为您的模型拥有一个基本序列化程序,以及三个具有您感兴趣的字段的子序列化程序:
class BaseSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
name = serializers.CharField(max_length=50)
email = serializers.EmailField(max_length=70)
phone = PhoneNumberField()
...
# Here is your sub-serializer
class EmailSerializer(BaseSerializer):
class Meta:
fields = ["email"]
# Here is your separate view for retrieving only emails:
class FetchEmailsView(generic.ListView):
serializer_class = EmailSerializer
queryset = userInfo.objects.all()
推荐阅读
- reactjs - 尝试在我的 Windows 10 机器上运行 React Native iOS 和 android 模拟器
- laravel - Laravel 验证修复 422
- android - 无法在 Crashlytics 中获取本机崩溃的堆栈跟踪
- regex - 如何在字符串中使用golang正则表达式所有匹配
- mysql - spring 使用 spring JDBCTemplate 在 mysql 表中插入一行
- typo3 - Typo3 - 更新域导致 404 错误
- php - Eloquent - 插入相关模型
- android - Android BottomSheetBehavior setPeekHeight(int peekHeight, boolean animate) 不对高度过渡进行动画处理
- winapi - Win32 事件名称仅对自己的进程可见
- android - 从适配器中移除的项目未重新排列