Я пытался изменить код 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
- это строка, содержащая имя соответствующего модель, а не экземпляр модели.
Я не знаю, что делать, чтобы обойти это. Нужно ли мне определять, какие зависимости есть у модели, и ждать, пока все они будут подготовлены, прежде чем я начну копировать поля? Есть идеи о том, как это сделать?