用另一个替换Django模型对象

时间:2012-07-23 18:01:04

标签: django django-admin django-orm

我正在开发一个应用程序,我们必须在接受之前检查模型更改。

为此,当用户在app前端编辑其中一个公司模型对象时,表单的初始数据将填充原始对象中的数据,然后存储到使用origin_company标记的新对象中field(对象的先前版本的外键)。

因此,当有人编辑公司时,就会创建一个新的非活动公司。

要应用更改,我想将已更改公司的所有数据复制到原始公司。 (我正在使用自定义django-admin操作执行此操作。)最简单的方法可能是启动事务,删除原始公司并更改已更改公司的主键以匹配原始公司。但通过这样做,更改的公司不是UPDATEd,它被复制。并且相关的数据库条目(FK)也不会更新。

是否有一种简单的方法可以将所有数据(包括FK关系)从一个模型实例复制或移动到另一个模型实例?或者我整个解决这个问题的方法搞砸了?

以下是模型定义:

class Company(models.Model):
    company_name = models.CharField(max_length=150)
    ...
    origin_company = models.ForeignKey('self', related_name=u'CompanyEdits',
            null=True, blank=True, default=None)

1 个答案:

答案 0 :(得分:1)

尝试以下方法:

# get the company instance's data as a dict
data = company_instance.__dict__.copy()
# remove the `id` and `origin_company` keys. don't need these
del data['id']
del data['origin_company_id']
# update the origin company instance
Company.objects.filter(id=company_instance.origin_company.id).update(**data)