文档章节

django rest framework 外键序列化方法与问题总结

_Change_
 _Change_
发布于 10/17 23:50
字数 416
阅读 28
收藏 0

django rest framework 外键序列化方法与问题总结

当借口中需要出现一对多关系的时候,我们可以用rest_framwork的序列化功能来处理,代码如下.

# models.py
from django.db import models


class PersonGoals(models.Model):
    name = models.CharField(max_length=100, verbose_name="目标名称")
    desc = models.CharField(max_length=200, verbose_name="说明")
    status = models.IntegerField()

    class Meta:
        db_table = "person_goals"

    def __str__(self):
        return self.name


class KeyResult(models.Model):
    name = models.CharField(max_length=100, verbose_name="结果名称")
    desc = models.CharField(max_length=200, verbose_name="结果说明")
    status = models.IntegerField()
    person = models.ForeignKey(to=PersonGoals, on_delete=None, related_name="result")

    class Meta:
        db_table = "key_result"

    def __str__(self):
        return self.name

# serialize.py
from rest_framework import serializers
from apple.models import PersonGoals, KeyResult


class KeyResultSerialize(serializers.ModelSerializer):
    class Meta:
        model = KeyResult
        fields = "__all__"


class PersonSerialize(serializers.ModelSerializer):
    result = KeyResultSerialize(many=True)  # 这里的result是ForeignKey中的related_name

    class Meta:
        model = PersonGoals
        fields = "__all__"

# views.py

from rest_framework.response import Response
from rest_framework.views import APIView

from apple.serializer import PersonSerialize, KeyResultSerialize
from apple.models import PersonGoals, KeyResult


class PersonView(APIView):
    def get(self, request):
        serialize = PersonSerialize(PersonGoals.objects.all(), many=True)
        return Response(serialize.data)


class KeyResultView(APIView):
    def get(self, request):
        serialize = KeyResultSerialize(KeyResult.objects.all(), many=True)
        return Response(serialize.data)

# urls.py
from django.urls import path
from apple import views
from rest_framework.urlpatterns import format_suffix_patterns

urlpatterns = [
    path("person/", views.PersonView.as_view(), name="person"),
    path("result/", views.KeyResultView.as_view(), name="result")
]

urlpatterns = format_suffix_patterns(urlpatterns)

效果如下

访问接口 http://127.0.0.1:8000/person/

HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

[
    {
        "id": 1,
        "result": [
            {
                "id": 1,
                "name": "学习多层接口处理方法",
                "desc": "使用1对多时的处理方法",
                "status": 1,
                "person": 1
            },
            {
                "id": 2,
                "name": "学习多层接口处理方法二",
                "desc": "不使用1对多处理",
                "status": 1,
                "person": 1
            }
        ],
        "name": "rest_framwork深度学习",
        "desc": "深入学习rest_framwork的api使用",
        "status": 1
    }
]

© 著作权归作者所有

共有 人打赏支持
_Change_
粉丝 12
博文 128
码字总数 72530
作品 0
普陀
QA/测试工程师
私信 提问
Django REST Framework 获得外键的值

问题:外键序列化,只显示 id 而不是内容 有两个 models,一个 model 是大学 University,包含字段 name。另一个是学生 Student。Student 中存在外键 university 指向 University 这个 mode...

楠木楠
05/04
0
0
python3-开发进阶Django中序列化以及rest_framework的序列化

一、django框架的序列化 直接上代码 1、这是app下的models.py from django.db import models # Create your models here. class Course(models.Model): 2、这是app下的view.py,两种序列化方...

天王盖地虎宝塔镇河妖
08/02
0
0
求解:怎么在serializer的时候对数据进行多表读写操作?

如何用无外键数据库,在 django rest framework 框架在序列化的时候实现多model数据增删改查?不知道使用什么方法实现; 为了优化,设计数据库的时候没有用外键,全部逻辑要自己写,然后用d...

cicigarto
05/10
0
0
Django REST Framework 教程5 关系和超链接API

Tutorial 5: Relationships & Hyperlinked APIs src 到目前为止,在我们的API中关系(relationship)还是通过主键来表示的。在这部分的教程中,我们将用超链接方式来表示关系,从而提升API的...

readilen
04/28
0
0
Django REST Framework 3.0 发布

Django REST Framework 3.0 发布,此版本经历了大约 4 年的迭代和细化,解决了之前序列化程序,字段和通用视图的问题。 此版本是增量版本,包括一些重大的 API 改进,升级需要你仔细阅读发行...

oschina
2014/12/02
4.5K
3

没有更多内容

加载失败,请刷新页面

加载更多

docker部署springboot项目

安装docker 菜鸟教程 springboot项目 maven依赖 <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001......

yimingkeji
今天
10
0
ios多个target

1.建立3个target,分别为heroone,heroone test,heroone dev;分别为正式环境,test环境,dev环境 2.注意取消掉autocreate以防止名字不对,分别以Duplicate的方式建立另外两个scheme 3.创建...

HeroHY
今天
5
0
php获取客户端IP

php获取客户端IP 首先先阅读关于IP真实性安全的文章:如何正確的取得使用者 IP? 「任何從客戶端取得的資料都是不可信任的!」 HTTP_CLIENT_IP头是有的,但未成标准,不一定服务器都实现。 ...

DrChenXX
昨天
0
0
. The valid characters are defined in RFC 7230 and RFC 问题

通过这里的回答,我们可以知道: Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证。 具体来说,就是添加了些规则去限制HTTP头的规范性 参考这里 具体来说: org.apache.tom...

west_coast
昨天
1
0
刷leetcode第704题-二分查找

今天双十一买的算法书到货了,路上刷到有人说的这个题,借(chao)鉴(xi)一下别人的思路,这个是C++标准库里面的经典方法,思路精巧,优雅好品味 int search(int* nums, int numsSize, in...

锟斤拷烫烫烫
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部