模型内部的复制方法

时间:2018-10-08 19:03:52

标签: django python-3.x django-models

(Django 2. +版)

我想在模型copy()中实现 BlogPost 方法,

根据以下规范从该模型(对象)创建完整副本:

  1. 复制整个帖子及其所有评论

  2. 将日期创建设置为复制的日期和时间

  3. 最后返回新博客帖子(已复制)ID

我的模特:

from django.db import models
from django.utils import timezone
from copy import copy, deepcopy


class Author(models.Model):
    name = models.TextField(max_length=50)


class BlogPost(models.Model):
     title = models.CharField(max_length=250)
     body = models.TextField()
     author = models.ForeignKey(Author, on_delete=models.CASCADE)
     date_created = models.DateTimeField(default=timezone.now)

    def copy(self):
        pass


class Comment(models.Model):
    blog_post = models.ForeignKey(BlogPost, on_delete=models.CASCADE)
    text = models.CharField(max_length=500)

例如,我们有:

  • 一位名为“乔”的作者
  • 一篇创建日期为“ 10月7日”的帖子
  • 关于此帖子的3条评论

对此帖子使用复制方法后:

我们有一位作者有2条帖子和6条评论(每个帖子有3条单独的评论)

1 个答案:

答案 0 :(得分:1)

我会做这样的事情:

   def copy(self):
        blog_new = BlogPost()
        blog_new.title=self.title
        blog_new.body = self.body
        blog_new.author = self.author
        blog_new.date_created = self.date_created
        blog_new.save()
        for comment in self.comment_set.all():
            comment.id = None
            comment.blog_post = blog_new
            comment.save()