Created
August 30, 2017 08:11
-
-
Save evildmp/7f92b8824df17b9f6e1b59b0bcef4a7a to your computer and use it in GitHub Desktop.
Extend NewsBlog
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -------------- 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