【问题标题】:How do you clone a model and its dependencies in Django 2.2?如何在 Django 2.2 中克隆模型及其依赖项?
【发布时间】:2019-09-23 20:25:40
【问题描述】:

如何克隆模型以使其包含(克隆)FK 相关模型上的数据?我查看了 Stack 上的各种相关问题,发现其中大部分是针对旧版本/过时版本的 Django。以下是一些说明性模型代码(为简洁起见,省略了 str 方法等):

class Tracking(models.Model):
    entry        = models.CharField(blank=False, max_length=50)
    timestamp    = models.DateTimeField(null=True, auto_now_add=True)
    active       = models.BooleanField(default=False)

class Author(models.Model):
    entry       = models.ForeignKey(Tracking, on_delete=models.CASCADE)
    first_name  = models.CharField(blank=False, max_length=50)
    last_name   = models.ImageField(null=True, blank=True)

class Scene(models.Model):
    entry       = models.ForeignKey(Tracking, on_delete=models.CASCADE)
    location    = models.CharField(blank=False, max_length=50)
    image       = models.ImageField(null=True, blank=True)

我想要的结果是在 Tracking 模型上克隆一个现有的“条目”,这样在新行上创建一个新的“条目”,并使用它自己的 PK,以及“作者”和“场景”的克隆副本” 各自表上的数据也指向新克隆的“条目”。任何指向正确方向的指针都会有所帮助。我在 django 文档中找不到任何内容。

【问题讨论】:

  • 您想对所有实例或特定实例执行此操作吗?获得您想要的模型并创建必要模型的新实例有什么问题?
  • 谢谢,我的意思是一个特定的实例。对于一些背景知识,我希望我的用户能够复制完整的模型和依赖模型,以便他们可以编辑和保存它们,最终“发布”它们。 “已发布”记录在跟踪模型上将是 active=True,但管理员可以通过使该记录处于活动状态来回滚到先前的数据集。对于我目前的技能水平来说,这实际上是雄心勃勃的,我什至想知道我是否以正确的方式思考这个问题。

标签: django postgresql


【解决方案1】:

事实证明,答案是 Stephen G Tuggy 编写的函数,as shown in this post.

我能够根据自己的目的修改此代码并在 shell 中成功运行它。这很棒。非常感谢Stephen。 “has_key()”函数已被弃用,需要替换为“in”,如“if field.name in”等。否则,从 Python 3.7/Django 2.2 开始,一切都很好。

【讨论】:

    猜你喜欢
    • 2011-01-06
    • 2018-12-24
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 2013-07-05
    • 2012-12-19
    • 2010-12-25
    • 2014-09-24
    相关资源
    最近更新 更多