annotate news/admin.py @ 943:cf9918328c64

Haystack tweaks for Django 1.7.7. I had to upgrade to Haystack 2.3.1 to get it to work with Django 1.7.7. I also had to update the Xapian backend. But I ran into problems. On my laptop anyway (Ubuntu 14.0.4), xapian gets mad when search terms are greater than 245 chars (or something) when indexing. So I created a custom field that would simply omit terms greater than 64 chars and used this field everywhere I previously used a CharField. Secondly, the custom search form was broken now. Something changed in the Xapian backend and exact searches stopped working. Fortunately the auto_query (which I was using originally and broke during an upgrade) started working again. So I cut the search form back over to doing an auto_query. I kept the form the same (3 fields) because I didn't want to change the form and I think it's better that way.
author Brian Neal <bgneal@gmail.com>
date Wed, 13 May 2015 20:25:07 -0500
parents 6dba56996a21
children 8386a8ebcbc7
rev   line source
gremmie@1 1 """
gremmie@1 2 This file contains the automatic admin site definitions for the News models.
gremmie@1 3 """
gremmie@1 4 from django.contrib import admin
bgneal@7 5 from django.conf import settings
bgneal@7 6
gremmie@1 7 from news.models import PendingStory
gremmie@1 8 from news.models import Story
gremmie@1 9 from news.models import Category
gremmie@1 10
bgneal@669 11 import ftfy
bgneal@669 12
bgneal@240 13
bgneal@240 14 class CategoryAdmin(admin.ModelAdmin):
bgneal@240 15 prepopulated_fields = {'slug': ("title", )}
bgneal@669 16 list_display = ['title', 'slug']
bgneal@240 17
bgneal@240 18
gremmie@1 19 class PendingStoryAdmin(admin.ModelAdmin):
bgneal@669 20 list_display = ['title', 'date_submitted', 'submitter']
bgneal@669 21 list_filter = ['date_submitted']
bgneal@669 22 search_fields = ['title', 'short_text', 'long_text']
bgneal@204 23 date_hierarchy = 'date_submitted'
bgneal@669 24 actions = ['approve_story']
bgneal@669 25 readonly_fields = ['update_date']
bgneal@669 26 raw_id_fields = ['submitter']
gremmie@1 27
bgneal@204 28 def approve_story(self, request, qs):
bgneal@204 29 for pending_story in qs:
bgneal@204 30 story = Story(
bgneal@204 31 title=pending_story.title,
bgneal@204 32 submitter=pending_story.submitter,
bgneal@204 33 category=pending_story.category,
bgneal@204 34 short_text=pending_story.short_text,
bgneal@204 35 long_text=pending_story.long_text,
bgneal@277 36 date_submitted=pending_story.date_submitted,
bgneal@204 37 allow_comments=pending_story.allow_comments,
bgneal@218 38 tags=pending_story.tags,
bgneal@462 39 front_page_expiration=pending_story.front_page_expiration,
bgneal@486 40 priority=pending_story.priority,
bgneal@486 41 meta_description=pending_story.meta_description)
bgneal@204 42 story.save()
bgneal@204 43 pending_story.delete()
bgneal@204 44
bgneal@398 45 count = len(qs)
bgneal@398 46 msg = "1 story" if count == 1 else "%d stories" % count
bgneal@398 47 self.message_user(request, "%s approved." % msg)
bgneal@398 48
bgneal@204 49 approve_story.short_description = "Approve selected pending stories"
bgneal@204 50
bgneal@204 51 class Media:
bgneal@486 52 js = ['js/news_admin.js'] + settings.GPP_THIRD_PARTY_JS['tiny_mce']
gremmie@1 53
gremmie@1 54
gremmie@1 55 class StoryAdmin(admin.ModelAdmin):
bgneal@669 56 list_display = ['title', 'date_submitted', 'submitter', 'category']
bgneal@669 57 list_filter = ['date_submitted', 'category']
bgneal@669 58 search_fields = ['title', 'short_text', 'long_text']
bgneal@204 59 date_hierarchy = 'date_submitted'
bgneal@669 60 readonly_fields = ['update_date']
bgneal@669 61 raw_id_fields = ['submitter']
bgneal@669 62 actions = ['fix_text']
bgneal@669 63
bgneal@669 64 def fix_text(self, request, qs):
bgneal@669 65 for story in qs:
bgneal@669 66 story.title = ftfy.fix_text(story.title)
bgneal@669 67 story.short_text = ftfy.fix_text(story.short_text)
bgneal@669 68 story.long_text = ftfy.fix_text(story.long_text)
bgneal@669 69 story.save()
bgneal@669 70
bgneal@669 71 count = len(qs)
bgneal@669 72 msg = "1 story" if count == 1 else "%d stories" % count
bgneal@669 73 self.message_user(request, "Text fixed on {}".format(msg))
bgneal@669 74
bgneal@669 75 fix_text.short_description = "Fix text on selected stories"
gremmie@1 76
bgneal@204 77 class Media:
bgneal@486 78 js = ['js/news_admin.js'] + settings.GPP_THIRD_PARTY_JS['tiny_mce']
gremmie@1 79
gremmie@1 80
bgneal@240 81 admin.site.register(Category, CategoryAdmin)
gremmie@1 82 admin.site.register(Story, StoryAdmin)
gremmie@1 83 admin.site.register(PendingStory, PendingStoryAdmin)