我一直在尝试修改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
但是,当 a与尚未准备好的模型上的字段相关时,这会遇到问题-get_related_field()
调用将失败,因为field.rel.to
是包含相关模型名称的字符串,而不是模型实例。
我不知道该怎么做才能解决这个问题。在我开始复制字段之前,我是否必须确定模型具有哪些依赖项,并等到它们都准备好?关于解决此问题的最佳方法的任何想法?