Копирование экземпляра модели в 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).

Вернуться на верх