The photologue models can be extended to better suit your project. The technique described on this page is not specific to Photologue - it can be applied to any 3rd party library.
The models within Photologue cannot be directly modified (unlike, for example, Django’s own User model). There are a number of reasons behind this decision, including:
- If code within a project modifies directly the Photologue models’ fields, it leaves the Photologue schema migrations in an ambiguous state.
- Likewise, model methods can no longer be trusted to behave as intended (as fields on which they depend may have been overridden).
However, it’s easy to create new models linked by one-to-one relationships to Photologue’s own
On this page we will show how you can add tags to the
Gallery model. For this we will use
the popular 3rd party application django-taggit.
Photo models currently have tag fields, however these are based on the
abandonware django-tagging application. Instead,
tagging is being entirely removed from Photologue, as it is a non-core functionality of a
gallery application, and is easy to add back in - as this page shows!
Create a customisation application¶
For clarity, it’s best to put our customisation code in a new application; let’s call it
photologue_custom; create the application and add it to your
photologue_custom application, we will edit 2 files:
from django.db import models from taggit.managers import TaggableManager from photologue.models import Gallery class GalleryExtended(models.Model): # Link back to Photologue's Gallery model. gallery = models.OneToOneField(Gallery, related_name='extended') # This is the important bit - where we add in the tags. tags = TaggableManager(blank=True) # Boilerplate code to make a prettier display in the admin interface. class Meta: verbose_name = u'Extra fields' verbose_name_plural = u'Extra fields' def __str__(self): return self.gallery.title
from django.contrib import admin from photologue.admin import GalleryAdmin as GalleryAdminDefault from photologue.models import Gallery from .models import GalleryExtended class GalleryExtendedInline(admin.StackedInline): model = GalleryExtended can_delete = False class GalleryAdmin(GalleryAdminDefault): """Define our new one-to-one model as an inline of Photologue's Gallery model.""" inlines = [GalleryExtendedInline, ] admin.site.unregister(Gallery) admin.site.register(Gallery, GalleryAdmin)
The above code is enough to start entering tags in the admin interface. To use/display them in the front end, you will also need to override Photologue’s own templates - as the templates are likely to be heavily customised for your specific project, an example is not included here.