jazzband / django-newsletter

An email newsletter application for the Django web application framework, including an extended admin interface, web (un)subscription, dynamic e-mail templates, an archive and HTML email support.
GNU Affero General Public License v3.0
849 stars 205 forks source link

TypeError at /admin/newsletter/submission/ argument of type 'NoneType' is not iterable #355

Closed rupertbaker closed 3 years ago

rupertbaker commented 3 years ago

Followed the steps in the docs and I'm able to create a Newsletter via the admin but I'm then unable to create a subscription (or a message and a submission).

Here is the traceback. Looks like something to do with timezone? Which I do have in settings: TIME_ZONE = "UTC" USE_I18N = True USE_L10N = True USE_TZ = True

  Request Method: GET Request URL: http://localhost:8000/admin/newsletter/subscription/?newsletter__id=1

Django Version: 3.1.4 Python Version: 3.9.0 Installed Applications: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.humanize', 'django.contrib.sessions', 'django.contrib.messages', 'whitenoise.runserver_nostatic', 'django.contrib.postgres', 'django.contrib.staticfiles', 'django.contrib.sites', 'django.contrib.sitemaps', 'django_version_checks', 'crispy_forms', 'allauth', 'allauth.account', 'django_bleach', 'django_extensions', 'django_filters', 'scout_apm.django', 'debug_toolbar', 'widget_tweaks', 'import_export', 'newsletter', 'non_admin_draftail', 'sorl.thumbnail', 'wagtail.contrib.forms', 'wagtail.contrib.redirects', 'wagtail.contrib.modeladmin', 'wagtail.embeds', 'wagtail.sites', 'wagtail.users', 'wagtail.snippets', 'wagtail.documents', 'wagtail.images', 'wagtail.search', 'wagtail.admin', 'wagtail.core', 'modelcluster', 'taggit', 'sharedgoals.core.apps.CoreConfig', 'sharedgoals.blog.apps.BlogConfig', 'django.forms'] Installed Middleware: ['django.middleware.common.CommonMiddleware', 'django.middleware.security.SecurityMiddleware', 'sharedgoals.core.middleware.www_redirect_middleware', 'whitenoise.middleware.WhiteNoiseMiddleware', 'debug_toolbar.middleware.DebugToolbarMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'sharedgoals.core.middleware.turbolinks_middleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'wagtail.contrib.redirects.middleware.RedirectMiddleware', 'sharedgoals.core.middleware.set_timezone_middleware']

Template error: In template /Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/contrib/admin/templates/admin/base.html, error at line 44 argument of type 'NoneType' is not iterable 34 :

35 : {% block usertools %} 36 : {% if has_permission %} 37 :
38 : {% block welcome-msg %} 39 : {% translate 'Welcome,' %} 40 : {% firstof user.get_short_name user.get_username %}. 41 : {% endblock %} 42 : {% block userlinks %} 43 : {% if site_url %} 44 : {% tr anslate 'View site' %} / 45 : {% endif %} 46 : {% if user.is_active and user.is_staff %} 47 : {% url 'django-admindocs-docroot' as docsroot %} 48 : {% if docsroot %} 49 : {% translate 'Documentation' %} / 50 : {% endif %} 51 : {% endif %} 52 : {% if user.has_usable_password %} 53 : {% translate 'Change password' %} / 54 : {% endif %}

Traceback (most recent call last): File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner response = get_response(request) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/core/handlers/base.py", line 202, in _get_response response = response.render() File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/response.py", line 105, in render self.content = self.rendered_content File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/response.py", line 83, in rendered_content return template.render(context, self._request) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/backends/django.py", line 61, in render return self.template.render(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/base.py", line 170, in render return self._render(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/test/utils.py", line 96, in instrumented_test_render return self.nodelist.render(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/loader_tags.py", line 150, in render return compiled_parent._render(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/test/utils.py", line 96, in instrumented_test_render return self.nodelist.render(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/loader_tags.py", line 150, in render return compiled_parent._render(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/test/utils.py", line 96, in instrumented_test_render return self.nodelist.render(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/loader_tags.py", line 150, in render return compiled_parent._render(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/test/utils.py", line 96, in instrumented_test_render return self.nodelist.render(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/loader_tags.py", line 62, in render result = block.nodelist.render(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/loader_tags.py", line 62, in render result = block.nodelist.render(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/defaulttags.py", line 312, in render return nodelist.render(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/contrib/admin/templatetags/base.py", line 33, in render return super().render(context) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/template/library.py", line 214, in render _dict = self.func(*resolved_args, **resolved_kwargs) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/contrib/admin/templatetags/admin_list.py", line 435, in date_hierarchy 'choices': [{ File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/db/models/query.py", line 287, in iter self._fetch_all() File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/db/models/query.py", line 1308, in _fetch_all self._result_cache = list(self._iterable_class(self)) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/db/models/query.py", line 180, in iter for row in compiler.results_iter(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size): File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 1108, in results_iter results = self.execute_sql(MULTI, chunked_fetch=chunked_fetch, chunk_size=chunk_size) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 1143, in execute_sql sql, params = self.as_sql() File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 498, in as_sql extra_select, order_by, group_by = self.pre_sql_setup() File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 55, in pre_sql_setup self.setup_query() File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 46, in setup_query self.select, self.klass_info, self.annotation_col_map = self.get_select() File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 262, in get_select sql, params = self.compile(col) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 430, in compile sql, params = node.as_sql(self, self.connection) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/db/models/functions/datetime.py", line 196, in as_sql sql = connection.ops.datetime_trunc_sql(self.kind, inner_sql, tzname) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/db/backends/postgresql/operations.py", line 70, in datetime_trunc_sql field_name = self._convert_field_to_tz(field_name, tzname) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/db/backends/postgresql/operations.py", line 54, in _convert_field_to_tz field_name = "%s AT TIME ZONE '%s'" % (field_name, self._prepare_tzname_delta(tzname)) File "/Users/rupertbaker/code/sharedgoals/venv/lib/python3.9/site-packages/django/db/backends/postgresql/operations.py", line 46, in _prepare_tzname_delta if '+' in tzname:

Exception Type: TypeError at /admin/newsletter/subscription/ Exception Value: argument of type 'NoneType' is not iterable