I created a new mezzanine project with the following software versions:
Linux 4.18.17-041817-generic (Ubuntu 18.04 with newer kernel)
MariaDB 10.1.34 (running fine after explicitly creating the database
with utf8 character encoding)
Python 3.6.6
Django 2.0.9 (from pypi)
Mezzanine 4.3.1 (from github, along with filebrowser-safe)
The only modifications I've made are changing the timezone in settings.py
and changing the database dictionary in local_settings.py.
Everything seemed to work. 'python manage.py createdb' was successful, then
'python manage.py runserver 127.0.0.1:8000' was also successful.
I logged into the admin interface, navigated to add a new richtext page,
filled in the title and body, and clicked save. A debug-friendly error page
was then returned, and the following text was in the console.
[12/Nov/2018 14:28:08] "POST /admin/admin_keywords_submit/ HTTP/1.1"
200 1
Internal Server Error: /admin/pages/richtextpage/add/
Traceback (most recent call last):
File
"/home/mike/projects/plab/venv/lib/python3.6/site-packages/django/core/handlers/exception.py",
line 35, in inner
response = get_response(request)
File
"/home/mike/projects/plab/venv/lib/python3.6/site-packages/django/core/handlers/base.py",
line 128, in _get_response
response = self.process_exception_by_middleware(e, request)
File
"/home/mike/projects/plab/venv/lib/python3.6/site-packages/django/core/handlers/base.py",
line 126, in _get_response
response = wrapped_callback(request, *callback_args,
**callback_kwargs)
File
"/home/mike/projects/plab/venv/lib/python3.6/site-packages/django/contrib/admin/options.py",
line 575, in wrapper
return self.admin_site.admin_view(view)(*args, **kwargs)
File
"/home/mike/projects/plab/venv/lib/python3.6/site-packages/django/utils/decorators.py",
line 142, in _wrapped_view
response = view_func(request, *args, **kwargs)
File
"/home/mike/projects/plab/venv/lib/python3.6/site-packages/django/views/decorators/cache.py",
line 44, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File
"/home/mike/projects/plab/venv/lib/python3.6/site-packages/django/contrib/admin/sites.py",
line 223, in inner
return view(request, *args, **kwargs)
File
"/home/mike/projects/plab/venv/lib/python3.6/site-packages/mezzanine/pages/admin.py",
line 66, in add_view
return super(PageAdmin, self).add_view(request, **kwargs)
File
"/home/mike/projects/plab/venv/lib/python3.6/site-packages/django/contrib/admin/options.py",
line 1554, in add_view
return self.changeform_view(request, None, form_url, extra_context)
File
"/home/mike/projects/plab/venv/lib/python3.6/site-packages/django/utils/decorators.py",
line 62, in _wrapper
return bound_func(*args, **kwargs)
File
"/home/mike/projects/plab/venv/lib/python3.6/site-packages/django/utils/decorators.py",
line 142, in _wrapped_view
response = view_func(request, *args, **kwargs)
File
"/home/mike/projects/plab/venv/lib/python3.6/site-packages/django/utils/decorators.py",
line 58, in bound_func
return func.__get__(self, type(self))(*args2, **kwargs2)
File
"/home/mike/projects/plab/venv/lib/python3.6/site-packages/django/contrib/admin/options.py",
line 1451, in changeform_view
return self._changeform_view(request, object_id, form_url,
extra_context)
File
"/home/mike/projects/plab/venv/lib/python3.6/site-packages/django/contrib/admin/options.py",
line 1492, in _changeform_view
self.save_related(request, form, formsets, not add)
File
"/home/mike/projects/plab/venv/lib/python3.6/site-packages/django/contrib/admin/options.py",
line 1049, in save_related
form.save_m2m()
File
"/home/mike/projects/plab/venv/lib/python3.6/site-packages/django/forms/models.py",
line 439, in _save_m2m
f.save_form_data(self.instance, cleaned_data[f.name])
File
"/home/mike/projects/plab/venv/lib/python3.6/site-packages/mezzanine/generic/fields.py",
line 206, in save_form_data
super(KeywordsField, self).save_form_data(instance, data)
File
"/home/mike/projects/plab/venv/lib/python3.6/site-packages/django/db/models/fields/__init__.py",
line 838, in save_form_data
setattr(instance, self.name, data)
File
"/home/mike/projects/plab/venv/lib/python3.6/site-packages/django/db/models/fields/related_descriptors.py",
line 509, in __set__
% self._get_set_deprecation_msg_params(),
TypeError: Direct assignment to the reverse side of a related set is
prohibited. Use +.set() instead.
[12/Nov/2018 14:28:08] "POST /admin/pages/richtextpage/add/ HTTP/1.1"
500 146350
Attempting to debug this in pycharm, I found that the item being saved was
a 'keyword' of ''. I had not entered any keywords in the form, so it
appears the empty string is saved, anyway. I've read through both django
and mezzanine code in the callstack, and it seems like this is related to
django's database layer and ManyToMany relationships. But it seems the
ultimate saving of the empty keyword is a Field.setattr() call, which is
neither an = or a .set(). And I don't know what the '+' character is from.
Can anyone help me to understand what needs to be fixed, here? Since I
haven't actually written any code, I'm tempted to think either mezzanine or
django needs a pull request. Or perhaps there's a compatibility issue
between versions of django and mezzanine? I haven't seen anything obvious
in git diffs. But until I understand better, I wouldn't know how to go
about fixing it. I have found a few slightly similar things in this group
and on stackexchange, but nothing that matches. The same behavior occurs if
I run the server and try to add a blog post rather than a richtextpage. And
I get the same behavior on a different server running debian 8 rather than
ubuntu 18.
Thanks for any advice!
--
You received this message because you are subscribed to the Google Groups
"Mezzanine Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.