2015-08-10 6 views
1

Я просматриваю и просматриваю различные страницы нашего проекта, и подавляющее большинство, похоже, отлично работает после обновления. Однако, когда я пытаюсь просмотреть определенную запись в admin, я получаю эту ошибку. При просмотре трассировки стека все делается внутри кода администратора Django, поэтому в моем собственном коде нет места, которое я могу отлаживать. Это может означать, что что-то не так с администратором Django или что есть какая-то заметка о выпуске, которую я пропустил, что необходимо для правильной работы. Есть идеи? Фактическая ошибка происходит здесь:При обновлении до Django 1.8, почему я получаю объект AttributeError 'ManyToManyRel', не имеет атрибута 'rel'?

сайт-пакеты/Джанго/вно/администратор/helpers.py в содержание, линия 206

if isinstance(f.rel, ManyToManyRel) and value is not None: 
    result_repr = ", ".join(map(six.text_type, value.all())) 
else: 
    result_repr = display_for_field(value, f) 

Очевидно, что я мог бы пойти в Django и взломать вокруг, но я не должен Не нужно делать это на новой установке. Любая помощь в выявлении проблемы будет высоко оценена. В этот момент я просто смотрю на экран.

+2

Пожалуйста, опубликуйте модель и администратор модели, которые вызывают ошибку. Также может помочь полная трассировка. – Alasdair

ответ

2

Откликнулся на комментарий Аласдайра и стал играть с нашим кодом администратора, и я смог сузить его до вызова метода, который вызывал ошибку.

У нас есть модель Lead, которая относится к нашей модели Company через ManyToManyField (т. Е. Один вывод может быть для одной или нескольких компаний). Поле, которое относится Lead к Company, имеет related_name «ведет».

class Company(models.Model): 
    ... 

class Lead(models.Model): 
    companies = models.ManyToManyField(Company, blank=True, related_name='leads') 
    ... 

CompanyAdmin, выглядит следующим образом:

class CompanyAdmin(admin.ModelAdmin): 
    ... 
    readonly_fields = 'leads', 
    ... 
    def leads(self, obj): 
     ... 

Так что, похоже, происходило было, когда мы пытались получить доступ к методу leads из CompanyAdmin, Django вместо этого пытается получить доступ к компании Lead объектов через связанное имя - ManyToManyField, который выбрасывает ошибку. Я разрешил конфликт, изменив имя метода в admin на «my_leads».

Похоже, что что-то изменилось где-то между 1,8 и окончательной версией 1.6, которая открыла дверь для потенциального конфликта между связанными именами и методами администратора. Решение, убедитесь, что нет совпадений в именовании, и все должно работать нормально.

+0

Пожалуйста, продолжайте следить за комментариями или отредактируйте исходный вопрос. Ответы для ответов, а не для добавления деталей. – Parker

+0

Моя первоначальная оценка была немного загадочной, но дальнейшее расследование привело к лучшему ответу. Обновлено. – meesterguyperson