一.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 向数据库中插入数据时处理外键的方法的更多相关文章

  1. 数据库中插入数据时发生ora-00984错误

    操作Oracle数据库,插入数据时显示:ORA-00984列在此处不允许错误,如下图所示: 出现的原因是由于,在插入字符或字符串型字段时.如果插入的数据是纯数字,则不会有错误:如果出现字符,则会报OR ...

  2. [oracle] 如何使用myBatis在数据库中插入数据并返回主键

    在MyBatis中,希望在Oracle中插入数据的同时返回主键值,而非插入的条数. ① oracle使用 selectKey. U_USER_INFO_SEQ 是在数据库中定义好的这张表关联的序列se ...

  3. 向mysql数据库中插入数据时显示“Duplicate entry '1′ for key ‘PRIMARY' ”错误

    错误情况如题,出现这个错误的原因十分简单: 很明显,这是主键的问题. 在一张数据表中是不能同时出现多个相同主键的数据的 这就是错误的原因,解决的方法: 1.可以将这张表设置成无主键(mysql支持,其 ...

  4. 使用 QSqlTableModel 模型向数据库中插入数据时,为什么使用 rowCount 函数只能返回 256 最大值?

    默认返回缓冲区里面的数据,如果你向要获取更多值,请在前面加入以下语句即可. while(model.canFetchMore()){ model.fetchMore(); } 该语句会获取更多的记录.

  5. 向Oracle数据库中插入数据出错:ORA-01036 无效的变量名或数据

    向Oracle数据库中插入数据出错: 经过排查,因为Update数据时没有出错,所以OracleHelper没有问题: 看异常信息提示:无效的变量和数据,应该是SQL语句的问题,调试时所传的实例Use ...

  6. 解决getJdbcTemplate往oracle数据库中插入数据返回主键出错问题

    我们使用Spring中的JdbcDaoSupport往Mysql中插入数据并返回主键代码,我们使用的mysql数据库,主键在数据库中设置为自增长:该类继承自JdbcDaoSupport,所以能直接使用 ...

  7. mysql数据库中插入数据INSERT INTO SET的优势

    往mysql数据库中插入数据.以前常用 INSERT INTO 表名 (列名1,列名2…) VALUES(列值1,列值2); 如果在PHP程序中,就会写成如下示例(往商品库里增加商品) $sql = ...

  8. mongodb数据库中插入数据

    mongodb数据库中插入数据 一:connection 访问集合: 在mongodb数据库中,数据是存储在许多数据集合中,可以使用数据库对象的collection方法访问一个集合.该方法使用如下: ...

  9. 以使用QSqlQuery向数据库中插入数据为例,做一个小结

    背景: 最近在使用Qt+SQLite写一个本地数据库管理程序(使用者不懂SQL),在写向数据库中插入数据的 相关的函数时,我遇到了几个问题(暂时就这些): 1.向指定字段插入指定数据时,读取到的数据都 ...

随机推荐

  1. Xpath解析xml

    Xpath解析xml其实最主要的是查找xml文档中信息,而且不需要了解xml文档结构 package com.huawei.xml; import java.io.InputStream;import ...

  2. Varint 数值压缩

    [Varint 数值压缩] Varint 是一种紧凑的表示数字的方法.它用一个或多个字节来表示一个数字,值越小的数字使用越少的字节数.这能减少用来表示数字的字节数.比如对于 int32 类型的数字,一 ...

  3. 96. Unique Binary Search Trees (Tree; DP)

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  4. 12. Integer to Roman (HashTable)

    Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 t ...

  5. METAL渲染是什么?

    METAL渲染是什么? Metal渲染是由苹果公司为iOS8以及更新版本开发的全新的底层渲染API.它侧重于减少GPU驱动的工作量,从而当Metal调用时,CPU的消耗将降至最低.这样一来,游戏就可以 ...

  6. jdk版本问题

    今天遇到很郁闷的问题jdk 版本是1.6 如何设置1.8 记录一下 可以设置环境变量设置jdk版本问题再就是在 1.java工具设置jdk版本问题 2.grandle  设置要注意 3.生成环境设置j ...

  7. 27-python 画图

    绝佳教程:http://pyecharts.org/#/zh-cn/prepare?id=%E4%BD%BF%E7%94%A8%E4%B8%BB%E9%A2%98安装 pyecharts pip in ...

  8. string.match(RegExp) 与 RegExp.exec(string) 深入详解

    string.match(RegExp) 与 RegExp.exec(string) 相同点与不同点对比解析: 1. 这两个方法,如果匹配成功,返回一个数组,匹配失败,返回null. 2. 当RegE ...

  9. 2.QWidget类

    简述: QWidget类是所有用户界面对象的基类. Widget是用户界面的基本单元:它从窗口系统接收鼠标,键盘和其他事件,并在屏幕上绘制自己. 每个Widget都是矩形的,它们按照Z-order进行 ...

  10. [operator]ubuntu + git

    1.创建分支 git checkout -b develop 2.提交分支到远程 git push origin develop 3.设置默认的提交分支 git branch --set-upstre ...