フィールドをコピーせず、関連フィールドをコピーするようにAuditTrailコードを変更しようとしています(つまり、監査モデルのデータベーステーブルに外部キーが必要ありません)。ForeignKey
私は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
私はこれを回避するために何をすべきか途方に暮れています。モデルの依存関係を特定し、それらがすべて準備されるまで待ってから、フィールドのコピーを開始する必要がありますか?これについて行くための最良の方法について何かアイデアはありますか?