Source

gnocchi-blog / gnocchi / blog / admin.py

from django.contrib import admin
from gnocchi.blog import models, forms

from taggit.models import TaggedItem
import re

register = admin.site.register

class PostAdmin(admin.ModelAdmin):
    list_display = (
        'title',
        'published',
        'post_date',
        'kill_date',
        'posted_by',
        'allow_comments',
    )
    list_filter = ('posted_by', 'published',)
    date_hierarchy = 'post_date'
    search_fields = ('title', 'content',)
    prepopulated_fields = {'slug': ('title',)}
    exclude = ('posted_by',)

    form = forms.PostAdminForm
    fieldsets = (
        (None, {
            'fields': ('title', 'slug',),
        },),
        ('Content', {
            'classes': ('wide',),
            'fields': ('content',),
        },),
        ('Extras', {
            'fields': (
                ('published', 'post_date', 'kill_date',),
                ('auto', 'tags',),
            ),
        },),
    )

    def queryset(self, request):
        qset = self.model.objects.all()
        if not request.user.is_superuser:
            return qset.filter(posted_by=request.user)
        return qset

    def save_model(self, request, obj, form, change):
        if not change:
            # initial posting
            obj.posted_by = request.user
        obj.save()

    def auto_tag(self, request, queryset):
        for post in queryset:
            tags = post.tags.all()
            tags.update([
                tag
                for tag in TaggedItem.tags_for(models.Post)
                if re.search(r'\b%s\b' % tag.name, post.content, re.I|re.M)
            ])
            post.tags.set(*tags)

    actions = [
        auto_tag,
    ]

register(models.Post, PostAdmin)

class CommentAdmin(admin.ModelAdmin):
    list_display = ('post_date', 'post', 'name', 'email', 'ip_address',
        'is_public', 'is_removed',)
    list_filter = ('is_public', 'is_removed', 'user_name',)
    date_heirarchy = ('post_date',)
    search_fieklds = ('user_name', 'comment',)

register(models.Comment, CommentAdmin)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.