2017-02-14 43 views
0

Администратор возвращает эту ошибку при попытке добавить экземпляр в одну из моих моделей. Сама модель имеет правильный метод str() и пока не содержит экземпляров. Также попытался заменить метод str() статическим методом или вообще удалить его. Не повезло.Ошибка в администрировании: __str__ возвращен не string (type NoneType)

Ошибка, похоже, указывает на то, что происходит неправильно в части истории администратора. StackTrace указывает на линию 33.

Error during template rendering 

In template /Users/snirp/juis/snirpdrive/glotto/venv/lib/python3.6/site-packages/django/contrib/admin/templates/admin/change_form.html, error at line 33 
__str__ returned non-string (type NoneType) 
23 {% endblock %} 
24 {% endif %} 
25 
26 {% block content %}<div id="content-main"> 
27 {% block object-tools %} 
28 {% if change %}{% if not is_popup %} 
29 <ul class="object-tools"> 
30  {% block object-tools-items %} 
31  <li> 
32   {% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %} 
33   <a href="{% add_preserved_filters history_url %}" class="historylink">{% trans "History" %}</a> 
34  </li> 
35  {% if has_absolute_url %}<li><a href="{{ absolute_url }}" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif %} 
36  {% endblock %} 
37 </ul> 
38 {% endif %}{% endif %} 
39 {% endblock %} 
40 <form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.model_name }}_form" novalidate>{% csrf_token %}{% block form_top %}{% endblock %} 
41 <div> 
42 {% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1" />{% endif %} 
43 {% if to_field %}<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}" />{% endif %} 

Эти соответствующие части моих models.py и admin.py

class UserContent(models.Model): 
    created_at = models.DateTimeField(auto_now_add=True) 
    updated_at = models.DateTimeField(auto_now=True) 
    created_by = models.ForeignKey(User, related_name='%(class)s_creator') 
    updated_by = models.ForeignKey(User, related_name='%(class)s_updater') 

    class Meta: 
     abstract = True 


class Linetrans(UserContent): 
    line = models.ForeignKey(Line) 
    translation = models.ForeignKey(Translation) 
    text = models.CharField(max_length=400) 

    #def __str__(self): 
    # return self.text 

    class Meta: 
     ordering = ['line'] 

и

admin.site.register(Linetrans) 

Другие классы модели очень похожи, и не возвращает ошибку , Ошибка также возникает, когда Linetrans добавляется как встроенный в другой класс администратора.

edit/update: Я прокомментировал все другие методы str() в моей модели и, несомненно, ошибка исчезла. Теперь попытаемся определить проблему.

ответ

11

Оказывается, был неожиданный пустой CharField в связанной модели. Оставив это ответ, потому что он может помочь другим.

Устранение неполадок, систематически комментируя методы ваших моделей, пока не найдете оскорбительную модель. Работайте там, чтобы определить оскорбительные записи.

+0

У меня был метод __str__, что возвращаемый 'self.title 'вместо' self.title или '' '. – Seth

1

У меня была аналогичная проблема. Проблема заключалась в том, что первичный ключ для одной строки был нулевым (я не знаю, как это произошло). Я не смог удалить строку из-за проблем с каскадом. поэтому мне пришлось сменить str mmethod на что-то подобное.

Защиту ул (Я): если self.customerName == None: возвращение "NAME ОШИБОК КЛИЕНТА IS NULL" возвращение self.customerName