【问题标题】:How Copy And Update A Function In Django Model如何在 Django 模型中复制和更新函数
【发布时间】:2020-12-03 20:18:06
【问题描述】:

我有一个 BlogPost 模型,我想在其中定义一个复制函数来复制所有帖子及其所有 cmets。 再加上;我还需要更新 data_created 的时间。 最后,它需要返回新的ID post。

P.s:如果能告诉我如何在 Django 控制台中进行测试,那就太好了。如何复制以及如何查看结果。

谢谢。

from django.db import models


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

    def __str__(self):
        return '{}'.format(self.name)


class BlogPost(models.Model):
    title = models.CharField(max_length=250)
    body = models.TextField()
    author = models.ForeignKey(to=Author, on_delete=models.CASCADE)
    data_created = models.DateTimeField(auto_now_add=True)

************
**Here I need your help.**

    def copy(self):
        for comment in self.comment_set.all():
            comment.pk = None
            comment.blog_post.data_created = comment.blog_post.data_created.now()
            comment.save()


class Comment(models.Model):
    blog_post = models.ForeignKey(to=BlogPost, on_delete=models.CASCADE)
    text = models.TextField()

    def __str__(self):
        return '{}'.format(self.text)

【问题讨论】:

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


    【解决方案1】:

    一种快速简便的方法是“删除” pk 并保存实例:

    class BlogPost(models.Model):
        ...
    
        def copy(self):
            self.pk = None
            self.save()
            return self
    

    可以这样使用:

    blog_post = BlogPost.objects.get(id='<the id>')
    the_copy = blog_post.copy()
    

    类似想法:How do I clone a Django model instance object and save it to the database?

    【讨论】:

      【解决方案2】:

      终于找到了我的答案Make a copy function in Django model

      def copy(self):
          blog = BlogPost.objects.get(pk=self.pk)
          comments = blog.comment_set.all()
      
          blog.pk = None
          blog.save()
      
          for comment in comments:
              comment.pk = None
              comment.blog_post = blog
              comment.save()
          return blog.id
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-10
        • 2021-01-04
        • 2014-05-05
        • 2016-12-18
        • 2020-11-20
        • 2016-10-17
        • 1970-01-01
        相关资源
        最近更新 更多