Копирование экземпляра модели в django не работает
Я хочу скопировать модель блога, я учел отношения внешнего ключа, но все равно ничего не получается при тестировании blog_copy и blog_author_copy. Кто-нибудь может мне помочь?
class Author(models.Model):
name = models.CharField(max_length=50)
class BlogPost(models.Model):
title = models.CharField(max_length=250)
body = models.TextField()
author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='blog_posts')
date_created = models.DateTimeField(auto_now_add=True)
def copy(self):
new = BlogPost.objects.get(pk=self.pk)
new.pk = None
new.id = None
new.date_created = datetime.now()
# new.author.blog_posts.add(new)
authors = Author.objects.all()
for author in authors:
if self.author == author:
author.blog_posts.add(new)
new.save()
old = BlogPost.objects.get(pk=self.pk)
for comment in old.comments.all():
comment.pk = None
comment.blog_post = new
comment.save()
new.comments.add(comment)
new.save()
class Comment(models.Model):
blog_post = models.ForeignKey(BlogPost, on_delete=models.CASCADE, related_name='comments')
text = models.CharField(max_length=500)
Это можно реализовать следующим образом:
def copy(self):
blog_copy = self
blog_copy.pk = None
blog_copy.id = None
blog_copy.date_created = datetime.now()
blog_copy.author = self.author
blog_copy.save()
comments_copy = []
for comment in self.comments.all():
comment.pk = None
comment.id = None
comment.blog_post = blog_copy
comments_copy.append(comment)
Comment.objects.bulk_create(comments_copy)
return blog_copy
self
- это сам экземпляр, поэтому нет необходимости получать его из базы данных отдельно. Для author
вы можете просто получить текущий экземпляр, используя self.author
(та же идея для comments
).