summaryrefslogtreecommitdiff
path: root/docs/extending_entry_model.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/extending_entry_model.rst')
-rw-r--r--docs/extending_entry_model.rst88
1 files changed, 0 insertions, 88 deletions
diff --git a/docs/extending_entry_model.rst b/docs/extending_entry_model.rst
index faa00e5..e69de29 100644
--- a/docs/extending_entry_model.rst
+++ b/docs/extending_entry_model.rst
@@ -1,88 +0,0 @@
-=====================
-Extending Entry model
-=====================
-
-.. module:: zinnia.models
-
-The :class:`Entry` model bundled in Zinnia can now be extended and customized.
-
-This feature is useful for who wants to add some fields in the model,
-or change its behavior. It allows Zinnia to be a really generic
-and reusable application.
-
-Imagine that I find Zinnia really great, but that is misses some fields
-or features to be the blog app that I need for my Django project.
-For example I need to add a custom field linking to an image gallery,
-2 solutions:
-
-* I search for another Django blogging app fitting my needs.
-* I make a monkey patch, but I won't be able to upgrade to future releases.
-
-These 2 solutions are really bad, that's why Zinnia provides
-a third solution.
-
-* Customizing the model noninvasively with the power of inheritance.
-
-How do we do that?
-
-In fact, simply by creating an abstract model inherited from
-:class:`EntryBaseModel`, adding fields or/and overriding his methods, and
-registering it with the :setting:`ZINNIA_ENTRY_BASE_MODEL` setting in your
-project.
-
-Example for adding a gallery field. ::
-
- from django.db import models
- from mygalleryapp.models import Gallery
- from zinnia.models import EntryAbstractClass
-
- class EntryGallery(EntryAbstractClass):
- gallery = models.ForeignKey(Gallery)
-
- class Meta:
- abstract = True
-
-
-Now you register the :class:`EntryGallery` model like this in your
-project's settings. ::
-
- ZINNIA_ENTRY_BASE_MODEL = 'appname.custom_entry.EntryGallery'
-
-
-Finally extend the entry's admin class to show your custom field. ::
-
- from django.contrib import admin
- from zinnia.models import Entry
- from zinnia.admin.entry import EntryAdmin
- from django.utils.translation import ugettext_lazy as _
-
- class EntryGalleryAdmin(EntryAdmin):
-
- # In our case we put the gallery field
- # into the 'Content' fieldset
- fieldsets = ((_('Content'), {'fields': (
- 'title', 'content', 'image', 'status', 'gallery')})) + \
- EntryAdmin.fieldsets[1:]
-
- admin.site.unregister(Entry)
- admin.site.register(Entry, EntryGalleryAdmin)
-
-
-You can see another example in the files :file:`zinnia/plugins/placeholder.py`
-and :file:`zinnia/plugins/admin.py`.
-
-.. note:: You have to respect **4 important rules** :
-
- #. Do not import the Entry model in your file defining the
- extended model because it will cause a circular importation.
-
- #. Do not put your abstract model in a file named models.py,
- it will not work for a non obvious reason.
-
- #. Don't forget to tell that your model is abstract. Otherwise a
- table will be created and the extending process will not work
- as expected.
-
- #. If you extend the Entry model after the syncdb command, you
- will have to reset the Zinnia application to reflect your
- changes.