好的,我认为这是非常基本的,但是由于我是 Django 新手,所以我不知道如何处理这个问题。
我需要复制一个 django-model 的实例。正如这里所解释的,复制多对多关系存在问题。但我猜附件“django-model-copying.diff”具有该功能。所以我不知道 - 我的 Django 是否已经具备该功能?我不知道怎么称呼它。帮助将不胜感激。
文档包括有关如何执行此操作的说明 - 包括如何处理多对多关系。
您可以执行以下操作:
m = MyModel.objects.get(pk=1)
m.id = None
m.save()
这样一来,新实例id
当然会用 new 创建,以防任何unique
属性在验证期间触发错误。
注意:
至于您提到的功能 - 它尚未添加到主干,状态为design decision needed
,但如果您知道自己在做什么,您可以手动将差异应用到您的 django 实例 - 这称为修补顺便说一句。以下是有关如何执行此操作的一些详细信息:http: //ariejan.net/2007/07/03/how-to-create-and-apply-a-patch-with-subversion/。
我将尝试回答您的实际问题,因为您在问题中所要求的是您提出的解决方案存在问题,正如许多人指出的那样,这并不理想。
在您提到的评论中:
我会尝试解释.. 所以我们有 2 个模型:用户和书籍。用户有一本名为“泰坦尼克号”的书,其中包含一些内容。现在,另一个用户也想要与那本书的关系。但是,第二个用户想要完全相同的书,但它应该被称为“Ship is going under”。我会复制这本书,并重命名它。- 我知道,我也可以将书的内容放在另一个模型中 - 但我的模型有点复杂。
看起来您要跟踪三件事:
对于每个Book
,存储其公共信息,例如:
class Author(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField()
def __unicode__(self):
return unicode(self.name)
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ManyToMany(Author)
isbn = models.CharField(max_length=13)
# and so on
def __unicode__(self):
return unicode(self.title)
现在,您需要存储 Book -> User 关系,例如一个用户可以拥有多本书,两个用户可能拥有同一本书,并附加了自己的元信息。
class BookClub(models.Model):
username = models.ForeignKey(User)
book = models.ForeignKey(Book)
comments = models.TextField()
如果您像这样构建模型,您将能够执行以下查询:
值得注意的是,从 django 1.8 开始,您可能拥有UUIDFields
. 如果您复制模型实例然后保存它,则unique
该列上的约束将失败,在这种情况下,您必须执行以下操作:
import uuid
m = MyModel.objects.get(pk=1)
m.pk = None
m.uuid = uuid.uuid4() //generate new uuid
m.save()