2

私は、モデルの変更を受け入れる前に確認する必要があるアプリケーションに取り組んでいます。

このため、ユーザーがアプリのフロントエンドで会社モデル オブジェクトの 1 つを編集すると、フォームの初期データに元のオブジェクトのデータが入力され、フィールドを使用してフラグが付けられた新しいオブジェクトに格納され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 に答える