2017-01-10 11 views
0

Я обновляюсь с 1.6 до 1.9. Мой проект включает в себя код, полученный на основе этого образца AuditTrail: https://code.djangoproject.com/wiki/AuditTrailrelated_name изменено после 1.6

По существу, этот 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 

По какой-то причине, после обновления, Джанго терпит неудачу с 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, которые могут быть виновниками.

Это происходит только в том случае, если я запускаю django с ./manage.py shell_plus, но, похоже, что-то загрузится правильно, если начато с ./manage.py shell.

+0

Установка 'related_name = '+' ', кажется, чтобы исправить это, но, очевидно, она теряет функциональность. – leonsas

ответ

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