• DJANGO复制记录的方法(转载)


    DJANGO复制记录的方法

    https://dmyz.org/archives/326

    最近的Django项目中有复制记录的需求。数据库里有一张名为Party的表,记录用户创建的party,现在要让用户能够复制一个新的party。本身非常简单的一个功能,但运行的时候出错了。我以为是复制过程出错,所以测试了一下Django中复制记录可能遇到的情况(后来发现是其他代码的逻辑出了问题),结果整理如下。

    1.Reset pk

    在Django中复制一条记录最简单的方法应该是先取出这条记录,将它的主键设置为None,然后再保存一次。

    2.Keyword Arguments

    如果某张表除了主键还有其他AutoField字段,就要换一种方式了,虽然也可以手动根据字段名将其指定为空,但直接遍历出字段名和相应的值,把其中的AutoField字段赋值为None会比较简单。

    3.Deepcopy

    Django没有直接复制记录的方法,但是Python提供了copy模块用来拷贝一个对象,所以也可以这样复制Django的记录:

    Except

    在关系型数据库中,存在相关联的表是很常见的事。Django中有三种关系型字段:ForeignKey/ManyToManyField/OneToOneField,这些就是需要例外处理的情况了。

    ForeignKey在数据库中是用整数型来存放id,所以只要清空主键,直接保存也不会出错。假设party有一个外键关联到creator,如果要把这个关联的外键也复制一份,可以直接Deepcopy:

    OneToOneField一般都是处理用户Profile和其他比较特殊的数据,所以还没有遇到过要复制OneToOneField的情况,纯测试了一下,前面提供的方法就可以解决,这里就不赘述了。

    ManyToManyField比较特殊,关联的一般是多条记录,需要做一些处理:

     
  • 相关阅读:
    JDBC 实例--JDBC通过工具类DBUtil连接到数据库,让我们不再恐惧操作数据库
    揭开JDBC的神秘面纱,让JDBC数据库的连接参数不再神秘
    实验六 最小代价生成树
    实验五 背包问题和带时限的作业排序
    实验四 图的遍历算法设计与实现
    实验三 跳表算法设计与实现
    实验二 伸展树算法设计与实现
    算法实例一 算法问题求解基础--欧几里得递归算法和递归算法
    2013年 蓝桥杯预赛 java 本科A 题目
    java常用开发工具类之 图片水印,文字水印,缩放,补白工具类
  • 原文地址:https://www.cnblogs.com/master-road/p/11114847.html
Copyright © 2020-2023  润新知