ゴールのM2Mフィールドの変更を承認したり元に戻したりできるようにする方法を基本的にどのように把握していると思いますか?これらの保留中の変更を後で承認または拒否するためにデータベースに保持する必要がある場合は、モデルのクローン作成は、特に元に戻す場合には最適な解決策ではない場合があります。これらの変更が多く予想される場合は、目標とイベントの「実際の」インスタンスから潜在的な変更を分離する必要があります。
私はゴールにリンクしているこれらの保留中の変更を表す新しいモデルを作成することをお勧めします。このオブジェクトは、目標のM2Mフィールドからの追加/削除されたレコードを追跡し、承認に関連するいくつかの追加フィールド(変更を承認した人など)を含むことができます。これらの新しいオブジェクトの1つが承認済みとマークされると、元の目標インスタンスに必要な変更を加えることができます。
追加/削除されたM2Mフィールドをどのように把握するのが難しい部分ですか。下の例では、保留中の変更オブジェクトに対応するM2Mを作成しました。このM2Mは、元のGoalオブジェクトに適用するための承認を反復することができます。
class Goal(models.Model):
...
class PendingGoalChange(models.Model):
goal = models.ForeignKey(Goal, related_name='changes')
approved = ...
approver = ....
added_m2m_field_instances = models.ManyToMany(...)
removed_m2m_field_instances = models.ManyToMany(...)
def approve(self):
self.approved = True
...
for new_field in self.added_m2m_field_instances.all():
self.goal.field.add(new_field)
あなたは(http://stackoverflow.com/questions/4733609/how-do-i-clone-a-django-model-instance-object-and- [モデルインスタンスのクローンを作成する方法]を求めていますデータベースに保存する)? – Sayse
@Sayseクローニングは私に記録の2つのバージョンを維持することができますか?あなたが投稿する前にあなたが投稿したリンクをたどったので、 –
本質的にそれは完全に別のインスタンスを作成します。もしそれがあれば、これはデフォルトで関連フィールドの新しいレコードを作成しません。 – Sayse