admin.py 2.46 KB
Newer Older
1
# Source: django-simplewiki. GPL license.
2

Piotr Mitros committed
3
from django import forms
4
from django.contrib import admin
Piotr Mitros committed
5
from django.utils.translation import ugettext as _
6

Piotr Mitros committed
7 8
from models import Article, Revision, Permission, ArticleAttachment

9

Piotr Mitros committed
10 11 12 13
class RevisionInline(admin.TabularInline):
    model = Revision
    extra = 1

14

Piotr Mitros committed
15 16 17 18
class RevisionAdmin(admin.ModelAdmin):
    list_display = ('article', '__unicode__', 'revision_date', 'revision_user', 'revision_text')
    search_fields = ('article', 'counter')

19

Piotr Mitros committed
20 21 22
class AttachmentAdmin(admin.ModelAdmin):
    list_display = ('article', '__unicode__', 'uploaded_on', 'uploaded_by')

23

Piotr Mitros committed
24 25 26 27 28 29 30 31 32 33 34 35 36
class ArticleAdminForm(forms.ModelForm):
    def clean(self):
        cleaned_data = self.cleaned_data
        if cleaned_data.get("slug").startswith('_'):
            raise forms.ValidationError(_('Slug cannot start with _ character.'
                                          'Reserved for internal use.'))
        if not self.instance.pk:
            parent = cleaned_data.get("parent")
            slug = cleaned_data.get("slug")
            if Article.objects.filter(slug__exact=slug, parent__exact=parent):
                raise forms.ValidationError(_('Article slug and parent must be '
                                              'unique together.'))
        return cleaned_data
37

Piotr Mitros committed
38 39 40
    class Meta:
        model = Article

41

Piotr Mitros committed
42
class ArticleAdmin(admin.ModelAdmin):
43
    list_display = ('created_by', 'slug', 'modified_on', 'namespace')
Piotr Mitros committed
44
    search_fields = ('slug',)
45
    prepopulated_fields = {'slug': ('title',)}
Piotr Mitros committed
46 47 48
    inlines = [RevisionInline]
    form = ArticleAdminForm
    save_on_top = True
49

Piotr Mitros committed
50 51 52 53 54 55 56 57 58 59 60 61 62
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == 'current_revision':
            # Try to determine the id of the article being edited
            id = request.path.split('/')
            import re
            if len(id) > 0 and re.match(r"\d+", id[-2]):
                kwargs["queryset"] = Revision.objects.filter(article=id[-2])
                return db_field.formfield(**kwargs)
            else:
                db_field.editable = False
                return db_field.formfield(**kwargs)
        return super(ArticleAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

63

Piotr Mitros committed
64 65 66 67 68 69
class PermissionAdmin(admin.ModelAdmin):
    search_fields = ('article', 'counter')

admin.site.register(Article, ArticleAdmin)
admin.site.register(Revision, RevisionAdmin)
admin.site.register(Permission, PermissionAdmin)
70
admin.site.register(ArticleAttachment, AttachmentAdmin)