Skip to content

Instantly share code, notes, and snippets.

@evildmp
Created August 30, 2017 08:11
Show Gist options
  • Save evildmp/7f92b8824df17b9f6e1b59b0bcef4a7a to your computer and use it in GitHub Desktop.
Save evildmp/7f92b8824df17b9f6e1b59b0bcef4a7a to your computer and use it in GitHub Desktop.
Extend NewsBlog
# -------------- models.py --------------
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext as _
from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver
from aldryn_newsblog.models import Article
@python_2_unicode_compatible
class ArticleExtention(models.Model):
article = models.OneToOneField(Article, related_name='ext')
show_featured_image_in_blog_content = models.BooleanField(
_('show featured image in blog content '), default=True, db_index=True)
def __str__(self):
return '%s' % (self.article_id)
@receiver(post_save, sender=Article)
def post_save_article_extention(sender, instance, **kwargs):
instance._post_saved_extention, __ = (ArticleExtention
.objects
.get_or_create(article_id=instance.id))
# -------------- admin.py --------------
# -*- coding: utf-8 -*-
from django.contrib import admin
from django import forms
from aldryn_newsblog import admin as aldryn_newsblog_admin
from aldryn_newsblog import models as aldryn_newsblog_models
from newsblog_article_extention.models import ArticleExtention
existing_admin = admin.site._registry.get(aldryn_newsblog_models.Article)
if existing_admin:
ExistingAdmin = existing_admin.__class__
else:
ExistingAdmin = aldryn_newsblog_admin.ArticleAdmin
ExistingAdminForm = existing_admin.form
class NewAdminForm(ExistingAdminForm):
show_featured_image_in_blog_content = forms.BooleanField(required=False)
def __init__(self, *args, **kwargs):
super(NewAdminForm, self).__init__(*args, **kwargs)
get_field = ArticleExtention._meta.get_field
self.fields['show_featured_image_in_blog_content'] = \
get_field('show_featured_image_in_blog_content').formfield()
if self.instance:
ext = ArticleExtention.objects.filter(article=self.instance).first()
if ext:
self.fields['show_featured_image_in_blog_content'].initial = \
ext.show_featured_image_in_blog_content
class ArticleExtendedAdmin(ExistingAdmin):
form = NewAdminForm
def get_queryset(self, request):
qs = super(ArticleExtendedAdmin, self).get_queryset(request)
return qs.prefetch_related('ext')
def get_fieldsets(self, request, obj=None):
fs = super(ArticleExtendedAdmin, self).get_fieldsets(request, obj=obj)
for section, options in fs:
if section is None and 'title' in (options.get('fields') or []):
options['fields'] = (
'title',
'author',
'publishing_date',
'is_published',
'is_featured',
'featured_image',
'show_featured_image_in_blog_content',
'lead_in',
)
return fs
def save_model(self, request, new_object, form, change):
super(ArticleExtendedAdmin, self).save_model(request, new_object, form, change)
show_featured_image_in_blog_content = \
form.cleaned_data.pop('show_featured_image_in_blog_content', '')
ext = ArticleExtention.objects.filter(article=new_object).first()
if not ext:
ext = ArticleExtention.objects.create(article=new_object)
ext.show_featured_image_in_blog_content = show_featured_image_in_blog_content
ext.save()
admin.site.unregister(aldryn_newsblog_models.Article)
admin.site.register(aldryn_newsblog_models.Article, ArticleExtendedAdmin)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment