我从1.6升级到1.9。 我的项目包括从此示例AuditTrail派生的代码:https://code.djangoproject.com/wiki/AuditTrail
基本上,此AuditTrail允许即时创建审计模型,以记录对审计表的任何更改。
部分代码需要确保避免related_name
之间的冲突。这样做如下,从1.6开始工作正常。
if isinstance(field, models.ForeignKey):
rel = copy.copy(field.rel)
rel.related_name = '_audit_' + field.related_query_name()
attrs[field.name].remote_field = rel
出于某种原因,在升级之后,django在所有这些上都失败并出现SystemCheckError,其回溯类似于:
SystemCheckError: System check identified some issues:
ERRORS:
email_reporting.ReportAudit.team: (fields.E304) Reverse accessor for 'ReportAudit.team' clashes with reverse accessor for 'Report.team'.
HINT: Add or change a related_name argument to the definition for 'ReportAudit.team' or 'Report.team'.
email_reporting.ReportAudit.team: (fields.E305) Reverse query name for 'ReportAudit.team' clashes with reverse query name for 'Report.team'.
HINT: Add or change a related_name argument to the definition for 'ReportAudit.team' or 'Report.team'.
任何想法如何解决?我无法找到可能是罪魁祸首的related_name
的任何更改。
只有当我使用./manage.py shell_plus
启动django时才会发生这种情况,但如果以./manage.py shell
启动,事情似乎正常启动。
答案 0 :(得分:0)
解决方案是直接修改rel
而不是remote_field
if isinstance(field, models.ForeignKey):
rel = copy.copy(field.rel)
if rel.related_name:
rel.related_name = '_audit_' + rel.related_name
elif rel:
rel.related_name = '_audit_' + rel.get_accessor_name()
attrs[field.name].rel.related_name=rel.related_name