我正在开发一个应用程序,我们必须在接受之前检查模型更改。
为此,当用户在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)
答案 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)