2

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

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

所以基本上当有人编辑公司时,就会创建一个新的、不活跃的公司。

要应用更改,我想将所有数据从更改后的公司复制到原始公司。(我正在使用自定义 django-admin 操作来执行此操作。)最简单的方法可能是开始交易,删除原始公司并更改已更改公司的主键以匹配原始公司。但是通过这样做,更改后的公司不会被更新,而是被复制。并且相关的数据库条目 (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)
4

1 回答 1

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)
于 2012-07-23T19:13:34.277 回答