метод копирования внутри модели - PullRequest
0 голосов
/ 08 октября 2018

(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)

Например, у нас есть:

  • Один автор с именем 'Джо'
  • Один пост с date_created '7 октября'
  • И 3 комментария по этому поводуpost

После использования метода копирования для этого поста:

у нас есть один автор с 2 постами и 6 комментариями (каждый пост имеет 3 отдельных комментария)

1 Ответ

0 голосов
/ 08 октября 2018

Я бы сделал что-то вроде этого:

   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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...