6

好的,我认为这是非常基本的,但是由于我是 Django 新手,所以我不知道如何处理这个问题。

我需要复制一个 django-model 的实例。正如这里所解释的,复制多对多关系存在问题。但我猜附件“django-model-copying.diff”具有该功能。所以我不知道 - 我的 Django 是否已经具备该功能?我不知道怎么称呼它。帮助将不胜感激。

4

4 回答 4

5

文档包括有关如何执行此操作的说明 - 包括如何处理多对多关系。

于 2013-03-10T09:33:59.613 回答
4

您可以执行以下操作:

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/

于 2010-09-30T20:44:19.157 回答
1

我将尝试回答您的实际问题,因为您在问题中所要求的是您提出的解决方案存在问题,正如许多人指出的那样,这并不理想。

在您提到的评论中:

我会尝试解释.. 所以我们有 2 个模型:用户和书籍。用户有一本名为“泰坦尼克号”的书,其中包含一些内容。现在,另一个用户也想要与那本书的关系。但是,第二个用户想要完全相同的书,但它应该被称为“Ship is going under”。我会复制这本书,并重命名它。- 我知道,我也可以将书的内容放在另一个模型中 - 但我的模型有点复杂。

看起来您要跟踪三件事:

  1. 用户
  2. 他们的书
  3. 用户对他们“拥有”图书的一些自定义注释。

对于每个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()

如果您像这样构建模型,您将能够执行以下查询:

  • “每个成员有多少本书?”
  • “最受欢迎的书是什么?”
  • “最不受欢迎的书是什么?”
  • “最受欢迎的作家是什么?”
于 2013-03-10T09:55:59.673 回答
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()
于 2016-04-17T08:51:28.037 回答