好吧我认为这是非常基本的,但由于我是Django的新手,我不知道如何处理这个问题。
我需要复制一个django模型的实例。正如here所解释的那样,复制ManyToMany关系存在问题。但附件“django-model-copying.diff”具有我猜的功能。所以我不知道 - 我的Django已经有了这个功能吗?我不知道怎么称呼它。 帮助将不胜感激。
答案 0 :(得分:4)
您可以执行以下操作:
m = MyModel.objects.get(pk=1)
m.id = None
m.save()
这样就可以使用新的id
创建新实例,如果有任何unique
属性,它将在验证期间触发错误。
注意:强>
至于你提到的功能 - 它还没有添加到主干,状态是design decision needed
,但如果你知道你正在做什么,你可以手动将差异应用到你的django实例 - 它被称为修补顺便说一句。以下是有关如何执行此操作的一些详细信息:http://ariejan.net/2007/07/03/how-to-create-and-apply-a-patch-with-subversion/。
答案 1 :(得分:4)
docs包含有关如何执行此操作的说明 - 包括如何处理多对多关系。
答案 2 :(得分:1)
我会尝试回答您的实际问题,因为您在问题中要求的是您提出的解决方案存在问题,正如许多人所指出的那样,问题并不理想。
在评论中你提到了这个:
我会尝试解释..所以我们有2个模型:用户和书。用户有一个 本书名为“泰坦尼克号”,内容有些。现在,另一个用户想要一个 与那本书的关系也是如此。但是,第二个用户想要完全相同 书,但它应该被称为“船正在下”..我会复制 预订并重命名。 - 我知道,我也可以把内容 预订另一个模型 - 但我的模型有点复杂。
看起来你有三件事要跟踪:
对于每个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 - >用户关系,例如一个用户可以拥有许多书籍,两个用户可能拥有相同的书籍,并附有自己的元信息。
class BookClub(models.Model):
username = models.ForeignKey(User)
book = models.ForeignKey(Book)
comments = models.TextField()
如果您按照这种方式构建模型,您将能够执行以下查询:
答案 3 :(得分:0)
值得注意的是,从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()