django rest framework如何实现nest field显示,如何保存有外键的字段更新

简介: 一步一步深入了。 相关设置技巧如下: 直接nest field显示: class VersionPoolSerializer(serializers.ModelSerializer): site_name = serializers.

一步一步深入了。

相关设置技巧如下:

直接nest field显示:

class VersionPoolSerializer(serializers.ModelSerializer):
    site_name = serializers.ReadOnlyField(source='site_name.name')
    dep_version = DeployPoolSerializer(many=True, required=False, read_only=True)
    create_user = serializers.ReadOnlyField(source='create_user.username')

    class Meta:
        model = VersionPool
        fields = ('id', 'name', 'site_name', 'dep_version', 'create_user', 'add_date')

如何自定义更新有外键的记录:

class VersionPoolViewSet(viewsets.ModelViewSet):
    """
    This viewset automatically provides `list`, `create`, `retrieve`,
    `update` and `destroy` actions.

    Additionally we also provide an extra `highlight` action.
    """
    queryset = VersionPool.objects.all()
    serializer_class = VersionPoolSerializer
    authentication_classes = (TokenAuthentication,)
    paginate_by = 10

    def get_queryset(self):
        print (self.request.user, '##################')
        print(self.request.auth, '##################')
        queryset = self.queryset
        return queryset

    def create(self, request, *args, **kwargs):
        name = request.data['name']
        site_name = request.data['site_name']
        validated_data = dict()
        validated_data['name'] = site_name + "-" + name
        validated_data['site_name'] = Site.objects.get(name=site_name)
        validated_data['create_user'] = request.user
        try:
            VersionPool.objects.create(**validated_data)
            response_data = {
                'name': site_name + "-" + name,
                'create_user': request.user.username,
                'message': 'version item save success.'
            }
            return Response(response_data, status=status.HTTP_201_CREATED)
        except:
            response_data = {
                'name': site_name + "-" + name,
                'create_user': request.user.username,
                'message': 'version item save failed.'
            }
            return Response(response_data, status=status.HTTP_400_BAD_REQUEST)

目录
相关文章
|
3月前
|
存储 安全 网络协议
Python 教程之 Django(9)对模型中的字段进行验证
Python 教程之 Django(9)对模型中的字段进行验证
30 0
Python 教程之 Django(9)对模型中的字段进行验证
|
4月前
|
JSON API 网络架构
Python Web 开发: 解释 Django REST framework 的作用,以及如何定义序列化器(Serializer)?
Python Web 开发: 解释 Django REST framework 的作用,以及如何定义序列化器(Serializer)?
|
4月前
|
存储 数据库 Python
Python 教程之 Django(9)对模型中的字段进行验证
Python 教程之 Django(9)对模型中的字段进行验证
37 0
|
7月前
|
API 网络架构 开发者
深入探索 Django Rest Framework
深入探索 Django Rest Framework
60 0
|
9月前
|
存储 前端开发 数据库
【Django学习】(十)模型序列化器_关联字段序列化
【Django学习】(十)模型序列化器_关联字段序列化
【Django学习】(十)模型序列化器_关联字段序列化
|
9月前
|
Python
【Django学习】(九)自定义校验器_单字段_多字段校验_模型序列化器类
【Django学习】(九)自定义校验器_单字段_多字段校验_模型序列化器类
|
9月前
|
数据库 网络架构 Python
18-Django REST framework-使用Django开发REST 接口
18-Django REST framework-使用Django开发REST 接口
|
SQL 测试技术 API
Django不通过外键实现多表关联查询
Django不通过外键实现多表关联查询
311 0
|
网络架构 Python
|
1月前
|
监控 安全 应用服务中间件
python中Django入门(四)
python中Django入门(四)
31 0