django rest framework 向数据库中插入数据时处理外键的方法
一.models.py中
from django.db import models class UserModel(models.Model)
user_name = models.CharField() class MyModel(models.Model)
author = models.Foreignkey(user)
age = models.CharField()
二. 序列化文件 serializers.py 中创建序列化类
from rest_framework.serializers import Serializer
from models import MyModel class MySerializer( Serializer.ModelSerializers): # 自定义字段
user_name = serializers.SerializerMethodField() class Meta:
model = MyModel
fields = ("user_name", "age") # 处理自定义的字段返回用户名, 通过外键获取UserModel的数据
def get_user_name(self, obj):
return obj.author.user_name def create(self, validated_data)
# 处理外键字段
return MyModel.objects.create(author=self.context["author"], **validated_data)
三.视图文件views.py中定义视图
# 视图函数中
from rest_framework.views import APIView # 类视图中使用,集成自该类
from rest_framework.decorators import api_view # 方法视图中使用,是一个装饰器,直接装饰方法视图 from rest_framework import status
from rest_framework.response import Response # 直接可以将字典数据转换成json数据
from models import MyModel
from serializers import MySerializer
from rest_framework.request import Request
from rest_framework import exceptions @api_view(['GET', 'POST', 'PUT', 'DELETE']) # 指明允许那些请求方式进行请求
def api_list(request): if request.method == 'GET':
# 向数据库查询数据,得到查询集
try:
query_set = MyModel.objects.all()
except Snippet.DoesNotExist:
return Response(status=status.HTTP_417_EXPECTATION_FAILED)
# 调用序列化类对象,返回进行了序列化的字段集合,使用serializers.data方式 获取数据
serializers = MySerializer(query_set, many=True)
# 取出数据,向客户端进行返回,Response()会将数据转化为json数据.
return Response(serializers.data, status=status.HTTP_200_OK) # 前端提交数据,调用模型,将其保存到数据库中
elif request.method == 'POST':
user = request.user
#将外键数据插入 这里插入一个user对象,就是外键所对应的主表的一个对象
serializer = MySerializer(data= request.data, context={"author":user})
# 如果反序列化的对象存在,就说明数据有效,将数据保存到数据库中
if serializer.is_valid():
# 调用save(), 从而调用序列化对象的create()方法,创建一条数据
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
django rest framework 向数据库中插入数据时处理外键的方法的更多相关文章
- 数据库中插入数据时发生ora-00984错误
操作Oracle数据库,插入数据时显示:ORA-00984列在此处不允许错误,如下图所示: 出现的原因是由于,在插入字符或字符串型字段时.如果插入的数据是纯数字,则不会有错误:如果出现字符,则会报OR ...
- [oracle] 如何使用myBatis在数据库中插入数据并返回主键
在MyBatis中,希望在Oracle中插入数据的同时返回主键值,而非插入的条数. ① oracle使用 selectKey. U_USER_INFO_SEQ 是在数据库中定义好的这张表关联的序列se ...
- 向mysql数据库中插入数据时显示“Duplicate entry '1′ for key ‘PRIMARY' ”错误
错误情况如题,出现这个错误的原因十分简单: 很明显,这是主键的问题. 在一张数据表中是不能同时出现多个相同主键的数据的 这就是错误的原因,解决的方法: 1.可以将这张表设置成无主键(mysql支持,其 ...
- 使用 QSqlTableModel 模型向数据库中插入数据时,为什么使用 rowCount 函数只能返回 256 最大值?
默认返回缓冲区里面的数据,如果你向要获取更多值,请在前面加入以下语句即可. while(model.canFetchMore()){ model.fetchMore(); } 该语句会获取更多的记录.
- 向Oracle数据库中插入数据出错:ORA-01036 无效的变量名或数据
向Oracle数据库中插入数据出错: 经过排查,因为Update数据时没有出错,所以OracleHelper没有问题: 看异常信息提示:无效的变量和数据,应该是SQL语句的问题,调试时所传的实例Use ...
- 解决getJdbcTemplate往oracle数据库中插入数据返回主键出错问题
我们使用Spring中的JdbcDaoSupport往Mysql中插入数据并返回主键代码,我们使用的mysql数据库,主键在数据库中设置为自增长:该类继承自JdbcDaoSupport,所以能直接使用 ...
- mysql数据库中插入数据INSERT INTO SET的优势
往mysql数据库中插入数据.以前常用 INSERT INTO 表名 (列名1,列名2…) VALUES(列值1,列值2); 如果在PHP程序中,就会写成如下示例(往商品库里增加商品) $sql = ...
- mongodb数据库中插入数据
mongodb数据库中插入数据 一:connection 访问集合: 在mongodb数据库中,数据是存储在许多数据集合中,可以使用数据库对象的collection方法访问一个集合.该方法使用如下: ...
- 以使用QSqlQuery向数据库中插入数据为例,做一个小结
背景: 最近在使用Qt+SQLite写一个本地数据库管理程序(使用者不懂SQL),在写向数据库中插入数据的 相关的函数时,我遇到了几个问题(暂时就这些): 1.向指定字段插入指定数据时,读取到的数据都 ...
随机推荐
- linux下实时查看log
1.先切换到:cd usr/local/tomcat5/logs2.tail -f catalina.out3.这样运行时就可以实时查看运行日志了 Ctrl+c 是退出tail命令. 顺便讲一下lin ...
- Apache HBase 集群安装文档
简介: Apache HBase 是一个分布式的.面向列的开源 NoSQL 数据库.具有高性能.高可靠性.可伸缩.面向列.分布式存储的特性. HBase 的数据文件最终落地在 HDFS 之上,所以在 ...
- C语言高级程序设计——进制算法以及位算符号
语言不够官方:意会: 数据储存运算是以二进制的,二进制数有原码 反码 补码三种.通常所说的二进制就是原码.(语言不官方) 原码 :4的原码可以为:0000 0100:最高位0 可以为符号数 反码:正数 ...
- mysql 一次性插入上万条数据测试专用
无聊期间 记录下 mysql 一次性插入上万条数据 测试的时候可以用 首先 创建一个表 t3 create table t3(id int)ENGINE = MyISAM; \d // 表示吧m ...
- 一些使用的linux库
1.curl网络库 apt-get install libcurl4-openssl-dev sudo apt-get install curl 2.jsoncpp库 sudo apt-get ins ...
- Brophp Nginx 虚拟主机的配置
默认情况下,Nginx 不支持 pathinfo 配置,通过查看了 Thinkphp Nginx 的配置情况,对虚拟主机配置修改如下: server { listen 80; list ...
- Java Thread系列(七)死锁
Java Thread系列(七)死锁 当线程需要同时持有多个锁时,有可能产生死锁.考虑如下情形: 线程 A 当前持有互斥所锁 lock1,线程 B 当前持有互斥锁 lock2.接下来,当线程 A 仍然 ...
- java反射简单实例
这篇博友的总结的反射知识点是比较全面的 http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html 下面介绍我用反射做的两个功能 ...
- c+内存管理机制
内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的 检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存 ...
- type="submit" 和type="button"
今天,小菜鸟又遇到一个问题,当不小心在页面输入框回车一下,结果莫名的页面发出了一个请求. 把问题定位在一个button上,代码是这样写的<button class="btn btn-d ...