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.向指定字段插入指定数据时,读取到的数据都 ...
随机推荐
- 如何快速选中某单元格所在的整行或整列 Excel教程
我们可以使用快捷键的操作来快速选中B3单元格所在的整行或整列,操作方法如下,请大家参阅! 一.正规的快捷键操作 ①快速选中整行 按下键盘上的 Shift Space 即同时按下键盘上的Shift 空格 ...
- The Process of Google Hiring
[The Process of Google Hiring] 1.keynote 1: The Google hiring process is designed to hire the most t ...
- JSP中系统Date的几点不符合中国时间观的地方
正常调用系统时间的显示格式是Date date = new Date 显示出来的当前时间为Sun Nov 22 18:39:51 CST 2015 星期天的英文单词是Sun, 这个大家都是熟悉的, 这 ...
- Solr Dismax查询解析器-深入分析
Solr 支持多种查询解析,给搜索引擎开发人员提供灵活的查询解析.Solr 中主要包含这几个查询解析器:标准查询解析器.DisMax 查询解析器,扩展 DisMax 查询解析器(eDisMax) Di ...
- Linux select/poll和epoll实现机制对比
关于这个话题,网上已经介绍的比较多,这里只是以流程图形式做一个简单明了的对比,方便区分. 一.select/poll实现机制 特点: 1.select/poll每次都需要重复传递全部的监听fd进来,涉 ...
- stl源码分析de练习
// StlTest1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <vector> #include & ...
- Oracle GoldenGate 三、加密
写在开始前 从上周开始,我花了大量的业余时间阅读GoldenGate官方文档,并根据文档实践和进一步学习了解GoldenGate,以下便是根据官方文档理解总结的GoldenGate学习内容: Orac ...
- 利用FFmpeg转压视频的说明
当我们制作视频的时候,录制完成的视频往往很大,很容易超过50M,上传的时候会很慢.下面将相关技巧说明如下(转载,版权属于原作者所有). 利用FFmpeg转压视频的说明 录制介绍视频时可以用尽可能高的分 ...
- 马婕 2014MBA专硕考试 报刊选读 6(转)
http://blog.sina.com.cn/s/blog_3e66af4601016udh.html Protecting the weakest保护最弱势群体The recession may ...
- Register A Callback To Handle SQLITE_BUSY Errors(译)
http://www.sqlite.org/c3ref/busy_handler.html留着自己看的. Register A Callback To Handle SQLITE_BUSY Error ...