Search code examples
djangodjango-tables2

Django_tables2 NonType object is not iterable


iam stuck in using django_tables2. i intended to display a simple table using a queryset. data in the model is being displayed in the djangoAdmin.

my model.py

class PM03(models.Model):
    date_done=models.DateField()
    ticket=models.CharField(unique=True,max_length=100)
    site_code=models.ForeignKey(Sites,on_delete=models.PROTECT)
    site_name=models.ForeignKey(Sites,on_delete=models.PROTECT,related_name='pm_site_name',to_field='site_name')
    spare_replaced_1=models.ForeignKey(Asset,related_name='pm_spare_replaced_1',on_delete=models.CASCADE,blank=True,null=True)
    spare_replaced_2=models.ForeignKey(Asset,related_name='pm_spare_replaced_2',on_delete=models.CASCADE,blank=True,null=True)
    spare_replaced_3=models.ForeignKey(Asset,related_name='pm_spare_replaced_3',on_delete=models.CASCADE,blank=True,null=True)
    rehabilitation=models.TextField(null=True,blank=True,help_text="indicate work done")
    saved_by=models.ForeignKey(User,on_delete=models.PROTECT)

    def __str__(self):
        return self.ticket,self.site_name
    class Meta:

        verbose_name='PM03'
        verbose_name_plural='PM03'

my view.py

    table_class = Asset_table
    queryset = Work_Orders_CR.objects.all()
    template_name = "test.html"

my tables.py

    class Meta:
         model=Work_Orders_CR
    template_name = "django_tables2/bootstrap4.html"

my traceback environment:

Request Method: GET
Request URL: http://localhost:8000/test

Django Version: 2.2.6
Python Version: 3.7.3
Installed Applications:
['IENG_MIS',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'management_information_system',
 'bootstrap_datepicker_plus',
 'widget_tweaks',
 'bootstrap4',
 'django_tables2',
 'django_datatables_view',
 'django_countries',
 'django_filters',
 'multiselectfield',
 'bootstrap3']
Installed Middleware:
['django.contrib.sessions.middleware.SessionMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']

Template error:

In template C:\Users\Rigelsolutions\source\repos\management_information_system\management_information_system\IENG_MIS\templates\test.html, error at line 111
   'NoneType' object is not iterable
   101 :                 <div class="row" style="margin-top: 1em; margin-left: 1mm">
   102 :                     
   103 :                         
   104 :                             <a class="btn btn-primary" href="{% url 'admin:index' %}">Inventory Manager</a>
   105 :                             
   106 :                     </div>
   107 :                 {% block maincontent %}
   108 :                 
   109 :                      <div class="bg-light table-resposive-lg">
   110 :                           <table id="asset_table" style="width:100%;" class="table table-hover sortable">
   111 :                               {%render_table table %} 
   112 : 
   113 :                           </table>
   114 :                      </div>
   115 :                 </div>
   116 :                  {% endblock %}
   117 : 
   118 :             </div>
   119 : 
   120 : 
   121 : 

Traceback:

File "C:\Users\Rigelsolutions\source\repos\management_information_system\management_information_system\mis_env\lib\site-packages\django\core\handlers\exception.py" in inner
  34.             response = get_response(request)

File "C:\Users\Rigelsolutions\source\repos\management_information_system\management_information_system\mis_env\lib\site-packages\django\core\handlers\base.py" in _get_response
  145.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\Rigelsolutions\source\repos\management_information_system\management_information_system\mis_env\lib\site-packages\django\core\handlers\base.py" in _get_response
  143.                 response = response.render()

File "C:\Users\Rigelsolutions\source\repos\management_information_system\management_information_system\mis_env\lib\site-packages\django\template\response.py" in render
  106.             self.content = self.rendered_content

File "C:\Users\Rigelsolutions\source\repos\management_information_system\management_information_system\mis_env\lib\site-packages\django\template\response.py" in rendered_content
  83.         content = template.render(context, self._request)

File "C:\Users\Rigelsolutions\source\repos\management_information_system\management_information_system\mis_env\lib\site-packages\django\template\backends\django.py" in render
  61.             return self.template.render(context)

File "C:\Users\Rigelsolutions\source\repos\management_information_system\management_information_system\mis_env\lib\site-packages\django\template\base.py" in render
  171.                     return self._render(context)

File "C:\Users\Rigelsolutions\source\repos\management_information_system\management_information_system\mis_env\lib\site-packages\django\template\base.py" in _render
  163.         return self.nodelist.render(context)

File "C:\Users\Rigelsolutions\source\repos\management_information_system\management_information_system\mis_env\lib\site-packages\django\template\base.py" in render
  937.                 bit = node.render_annotated(context)

File "C:\Users\Rigelsolutions\source\repos\management_information_system\management_information_system\mis_env\lib\site-packages\django\template\base.py" in render_annotated
  904.             return self.render(context)

File "C:\Users\Rigelsolutions\source\repos\management_information_system\management_information_system\mis_env\lib\site-packages\django\template\loader_tags.py" in render
  53.                 result = self.nodelist.render(context)

File "C:\Users\Rigelsolutions\source\repos\management_information_system\management_information_system\mis_env\lib\site-packages\django\template\base.py" in render
  937.                 bit = node.render_annotated(context)

File "C:\Users\Rigelsolutions\source\repos\management_information_system\management_information_system\mis_env\lib\site-packages\django\template\base.py" in render_annotated
  904.             return self.render(context)

File "C:\Users\Rigelsolutions\source\repos\management_information_system\management_information_system\mis_env\lib\site-packages\django_tables2\templatetags\django_tables2.py" in render
  159.             template = select_template(template_name)

File "C:\Users\Rigelsolutions\source\repos\management_information_system\management_information_system\mis_env\lib\site-packages\django\template\loader.py" in select_template
  39.     for template_name in template_name_list:

Exception Type: TypeError at /test
Exception Value: 'NoneType' object is not iterable

Solution

  • I have the exact same issue, my problem was I forgot to put template_name in the Class. It should be in the Meta class instead:

    Before

    template_name = "django_tables2/bootstrap4.html"
    class Meta:
         model=Work_Orders_CR
    

    After

    class Meta:
         model=Work_Orders_CR
         template_name = "django_tables2/bootstrap4.html"
    

    I'm seeing your code is missing spaces