AuditTrailのコードを変更して、ForeignKey
フィールドをコピーしないようにしましたが、関連フィールドをコピーします(つまり、私のデータベーステーブルに外部キーは必要ありません。監査モデル)。Django:AuditTrail&Lazy Relations
私はそうのように見えるcopy_field
機能を書いている:
def copy_field(field):
while(isinstance(field, models.OneToOneField, models.ForeignKey)):
field = field.rel.get_related_field()
if isinstance(field, models.AutoField):
f = models.IntegerField()
else:
f = copy(field)
#...snip some adjusting of fs attributes...
return f
AuditTrail
属性を持つモデルは(class_prepared
信号を介して)準備されている場合、このコードが実行されます。
ForeignKey
がまだ準備されていないモデルのフィールドに関連しているときしかし、これは問題に走る - get_related_field()
コールは失敗します、field.rel.to
は、関連するモデルの名前を含む文字列であるためではなく、モデルインスタンス。
私はこれを回避するために何をすべきか分かりません。フィールドのコピーを開始する前に、モデルの依存関係を判断して、準備が完了するまで待つ必要がありますか?これについての最善の方法についてのアイデア?