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