Создание функции для копирования объекта в модели django
мне нужно создать функцию для копирования объекта моей модели мой код:
class Author(models.Model):
name = models.CharField(max_length=50)
class BlogPost(models.Model):
title = models.CharField(max_length=250)
body = models.CharField(max_length=None)
author = models.ForeignKey(Author ,on_delete=models.CASCADE)
data_created = models.DateTimeField(auto_now_add=datetime.now)
def copy(self):
new_post = BlogPost.objects.get(id=self.id).update(data_created=datetime.now)
new_post.save()
return new_post.id
class Comment(models.Model):
blog_post = models.ForeignKey(BlogPost , on_delete=models.CASCADE)
text = models.CharField(max_length=500)
def copy в классе BlogPost для копирования объектов и создания нового объекта и обновления data_created до now Что после этого у меня есть 2 объекта, но они не работают, что я могу сделать?
Показанный вами код не копирует, он просто обновляет время на том же объекте, не создавая новый объект.
Один "простой" вариант, если вы хотите сделать копирование внутри метода модели:
from django.utils import timezone as tz
class BlogPost(models.Model):
...
def copy(self):
# this is a method of the model, so 'self' holds the
# object already, so no need to use '.objects.get()'
new_post = BlogPost()
new_post.title = self.title
new_post.body = self.body
new_post.author = self.author
new_post.data_created = tz.now()
new_post.save()
Примечание: рекомендуется использовать timezone.now()
вместо datetime.datetime.now()
, см. https://docs.djangoproject.com/en/3.2/topics/i18n/timezones/#naive-and-aware-datetime-objects