0
votes

I knew there is tons of post regarding this error. I think what I got is pretty strange.

Ok here it is.

models.py

class Axie(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=30, blank=True, null=True)
    sire = models.ForeignKey("Axie", related_name= "mysire", blank=True, null=True, on_delete=models.SET_NULL)
    matron = models.ForeignKey("Axie", related_name= "mymatron", blank=True, null=True, on_delete=models.SET_NULL)
    scholar= models.ForeignKey(Scholar,null=True, blank=True, on_delete=models.SET_NULL)

    def __str__(self):
        return self.name

With that code, I got a normal basic list as usual

enter image description here

But I got error on every 'change view'

enter image description here

This is the traceback from debug page

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/admin/university/axie/10277276/change/

Django Version: 4.0.2
Python Version: 3.8.10
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'university.apps.UniversityConfig']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']


Template error:
In template /home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/contrib/admin/templates/admin/includes/fieldset.html, error at line 19
   __str__ returned non-string (type NoneType)
   9 :             {% for field in line %}
   10 :                 <div{% if not line.fields|length_is:'1' %} class="fieldBox{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% if not field.is_readonly and field.errors %} errors{% endif %}{% if field.field.is_hidden %} hidden{% endif %}"{% elif field.is_checkbox %} class="checkbox-row"{% endif %}>
   11 :                     {% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.errors }}{% endif %}
   12 :                     {% if field.is_checkbox %}
   13 :                         {{ field.field }}{{ field.label_tag }}
   14 :                     {% else %}
   15 :                         {{ field.label_tag }}
   16 :                         {% if field.is_readonly %}
   17 :                             <div class="readonly">{{ field.contents }}</div>
   18 :                         {% else %}
   19 :                              {{ field.field }} 
   20 :                         {% endif %}
   21 :                     {% endif %}
   22 :                     {% if field.field.help_text %}
   23 :                         <div class="help">{{ field.field.help_text|safe }}</div>
   24 :                     {% endif %}
   25 :                 </div>
   26 :             {% endfor %}
   27 :         </div>
   28 :     {% endfor %}
   29 : </fieldset>


Traceback (most recent call last):
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/core/handlers/base.py", line 204, in _get_response
    response = response.render()
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/response.py", line 105, in render
    self.content = self.rendered_content
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/response.py", line 83, in rendered_content
    return template.render(context, self._request)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 176, in render
    return self._render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 168, in _render
    return self.nodelist.render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 977, in render
    return SafeString(''.join([
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 978, in <listcomp>
    node.render_annotated(context) for node in self
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 938, in render_annotated
    return self.render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/loader_tags.py", line 153, in render
    return compiled_parent._render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 168, in _render
    return self.nodelist.render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 977, in render
    return SafeString(''.join([
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 978, in <listcomp>
    node.render_annotated(context) for node in self
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 938, in render_annotated
    return self.render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/loader_tags.py", line 153, in render
    return compiled_parent._render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 168, in _render
    return self.nodelist.render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 977, in render
    return SafeString(''.join([
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 978, in <listcomp>
    node.render_annotated(context) for node in self
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 938, in render_annotated
    return self.render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/loader_tags.py", line 65, in render
    result = block.nodelist.render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 977, in render
    return SafeString(''.join([
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 978, in <listcomp>
    node.render_annotated(context) for node in self
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 938, in render_annotated
    return self.render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/loader_tags.py", line 65, in render
    result = block.nodelist.render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 977, in render
    return SafeString(''.join([
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 978, in <listcomp>
    node.render_annotated(context) for node in self
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 938, in render_annotated
    return self.render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/defaulttags.py", line 217, in render
    nodelist.append(node.render_annotated(context))
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 938, in render_annotated
    return self.render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/loader_tags.py", line 201, in render
    return template.render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 178, in render
    return self._render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 168, in _render
    return self.nodelist.render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 977, in render
    return SafeString(''.join([
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 978, in <listcomp>
    node.render_annotated(context) for node in self
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 938, in render_annotated
    return self.render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/defaulttags.py", line 217, in render
    nodelist.append(node.render_annotated(context))
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 938, in render_annotated
    return self.render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/defaulttags.py", line 217, in render
    nodelist.append(node.render_annotated(context))
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 938, in render_annotated
    return self.render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/defaulttags.py", line 298, in render
    return nodelist.render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 977, in render
    return SafeString(''.join([
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 978, in <listcomp>
    node.render_annotated(context) for node in self
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 938, in render_annotated
    return self.render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/defaulttags.py", line 298, in render
    return nodelist.render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 977, in render
    return SafeString(''.join([
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 978, in <listcomp>
    node.render_annotated(context) for node in self
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 938, in render_annotated
    return self.render(context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 1044, in render
    return render_value_in_context(output, context)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/template/base.py", line 1021, in render_value_in_context
    value = str(value)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/utils/html.py", line 377, in <lambda>
    klass.__str__ = lambda self: mark_safe(klass_str(self))
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/forms/boundfield.py", line 33, in __str__
    return self.as_widget()
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/forms/boundfield.py", line 92, in as_widget
    return widget.render(
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/forms/widgets.py", line 246, in render
    context = self.get_context(name, value, attrs)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/contrib/admin/widgets.py", line 283, in get_context
    'rendered_widget': self.widget.render(name, value, attrs),
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/forms/widgets.py", line 246, in render
    context = self.get_context(name, value, attrs)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/forms/widgets.py", line 681, in get_context
    context = super().get_context(name, value, attrs)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/forms/widgets.py", line 642, in get_context
    context['widget']['optgroups'] = self.optgroups(name, context['widget']['value'], attrs)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/forms/widgets.py", line 592, in optgroups
    for index, (option_value, option_label) in enumerate(self.choices):
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/forms/models.py", line 1191, in __iter__
    yield self.choice(obj)
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/forms/models.py", line 1205, in choice
    self.field.label_from_instance(obj),
  File "/home/bino/.local/share/virtualenvs/djenv-loPXW3SM/lib/python3.8/site-packages/django/forms/models.py", line 1274, in label_from_instance
    return str(obj)

Exception Type: TypeError at /admin/university/axie/10277276/change/
Exception Value: __str__ returned non-string (type NoneType)

Next, I remove the 'def str(self)' part,

class Axie(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=30, blank=True, null=True)
    sire = models.ForeignKey("Axie", related_name= "mysire", blank=True, null=True, on_delete=models.SET_NULL)
    matron = models.ForeignKey("Axie", related_name= "mymatron", blank=True, null=True, on_delete=models.SET_NULL)
    scholar= models.ForeignKey(Scholar,null=True, blank=True, on_delete=models.SET_NULL)

As expected, the list view do not show the name,

enter image description here

But Got 'nice' change view

enter image description here

Kindly please give me any clue to fix this problem.

Sincerely

-bino-

You're trying to display an Axie instance with its name set to None. You explicitly allowed Axie instances to have None as their name by passing null=True to models.CharField.Brian