Extending Zinnia Entry

509 views Asked by At

i am currently working on a website where i want to use django-blog-zinnia with django-cms. I have to extend the entry by a foreign key to another so i followed the documentation on the zinnia website.

I wrote the zinnia_extra/models.py:

from django.db import models
from zinnia.models_bases.entry import AbstractEntry


class AssociationBlog(AbstractEntry):
    association = models.ForeignKey("associations.Association",
                                blank=True,
                                default=None,
                                null=True,
                                related_name='news')

    def __str__(self):
        return 'AssociationBlog %s' % self.title

    class Meta(AbstractEntry.Meta):
        abstract = True

Now i came to the south part wich was a painful lesson of underdocumentation. After several hours of reading several answers here i found out that setting up the south migration modules mean something like this:

SOUTH_MIGRATION_MODULES = {
    'zinnia': 'zinnia_extra.migrations.zinnia',
}

After that i added

ZINNIA_ENTRY_BASE_MODEL = 'zinnia_extra.models.AssociationBlog'

and also i built a zinnia_extra/admin.py:

from django.contrib import admin
from django.utils.translation import ugettext_lazy as _
from zinnia.models.entry import Entry
from zinnia.admin.entry import EntryAdmin


class AssociationBlogAdmin(EntryAdmin):

    fieldsets = ((_('Content'), {'fields': (
       ('title', 'status'), 'content', 'image', 'association')}),) + \
            EntryAdmin.fieldsets[1:]


admin.site.unregister(Entry)
admin.site.register(Entry, AssociationBlogAdmin)

(which is like in the documentation)

to the settings.py. South works as expected with an resolved migration error that is actually unresolved. But i managed to get that. But my extra field is not in the Admin area. I searched around and found out that i have to add the extra to the INSTALLED_APPS, so they now look like that:

INSTALLED_APPS = (
    ... ,
    'zinnia',
    'cmsplugin_zinnia',
    'zinnia_ckeditor',
    'zinnia_extra'
)

which is actually also found in the documentation (http://docs.django-blog-zinnia.com/en/latest/how-to/extending_entry_model.html).

But now i get an error like this:

Unhandled exception in thread started by <function wrapper at 0x1082ad9b0>
Traceback (most recent call last):
  File "/myproject/venv/lib/python2.7/site-packages/django/utils/autoreload.py", line 93, in wrapper
    fn(*args, **kwargs)
  File "/myproject/venv/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 101, in inner_run
    self.validate(display_num_errors=True)
  File "/myproject/venv/lib/python2.7/site-packages/django/core/management/base.py", line 310, in validate
    num_errors = get_validation_errors(s, app)
  File "/myproject/venv/lib/python2.7/site-packages/django/core/management/validation.py", line 34, in get_validation_errors
    for (app_name, error) in get_app_errors().items():
  File "/myproject/venv/lib/python2.7/site-packages/django/db/models/loading.py", line 196, in get_app_errors
    self._populate()
  File "/myproject/venv/lib/python2.7/site-packages/django/db/models/loading.py", line 75, in _populate
    self.load_app(app_name, True)
  File "/myproject/venv/lib/python2.7/site-packages/django/db/models/loading.py", line 99, in load_app
    models = import_module('%s.models' % app_name)
  File "/myproject/venv/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in import_module
    __import__(name)
  File "/myproject/venv/lib/python2.7/site-packages/zinnia/models/__init__.py", line 4, in <module>
    from zinnia.models.entry import Entry
 File "/myproject/venv/lib/python2.7/site-packages/zinnia/models/entry.py", line 6, in <module>
    class Entry(load_model_class(ENTRY_BASE_MODEL)):
File: "/myproject/venv/lib/python2.7/site-packages/zinnia/models_bases/__init__.py", line 20, in load_model_class
    raise ImproperlyConfigured('%s cannot be imported' % model_path)
django.core.exceptions.ImproperlyConfigured: zinnia_extra.models.AssociationBlog cannot be imported

I've searched for several hours now, but i am at the end and don't know how to search for this error type. Can someone provide an tutorial on the current extension workflow or help me with this error?

1

There are 1 answers

0
AlvaroAV On

It seems the problem is the importation of zinnia_extra model.

Could be possible you need to add this line:

from zinnia_extra.models import AssociationBlog

in some file ?

I'm not sure in wich file, but it seems Django can't import your created class.

Maybe you need to add this import to your admin.py or other file where Django uses AssociationBlog

Other idea that comes to my mind is:

  • Could be that you need to add the zinnia_extra path to Python Path ? Is it in the same path as your project or same path as zinnia app?