118 lines
2.5 KiB
Python
118 lines
2.5 KiB
Python
|
from django.contrib import admin
|
||
|
from django import forms
|
||
|
|
||
|
from models import *
|
||
|
|
||
|
site = admin.AdminSite(name="admin")
|
||
|
|
||
|
|
||
|
class BookInline(admin.TabularInline):
|
||
|
model = Author.books.through
|
||
|
|
||
|
|
||
|
class AuthorAdmin(admin.ModelAdmin):
|
||
|
inlines = [BookInline]
|
||
|
|
||
|
|
||
|
class InnerInline(admin.StackedInline):
|
||
|
model = Inner
|
||
|
can_delete = False
|
||
|
readonly_fields = ('readonly',) # For bug #13174 tests.
|
||
|
|
||
|
|
||
|
class HolderAdmin(admin.ModelAdmin):
|
||
|
|
||
|
class Media:
|
||
|
js = ('my_awesome_admin_scripts.js',)
|
||
|
|
||
|
|
||
|
class InnerInline2(admin.StackedInline):
|
||
|
model = Inner2
|
||
|
|
||
|
class Media:
|
||
|
js = ('my_awesome_inline_scripts.js',)
|
||
|
|
||
|
|
||
|
class InnerInline3(admin.StackedInline):
|
||
|
model = Inner3
|
||
|
|
||
|
class Media:
|
||
|
js = ('my_awesome_inline_scripts.js',)
|
||
|
|
||
|
|
||
|
class TitleForm(forms.ModelForm):
|
||
|
|
||
|
def clean(self):
|
||
|
cleaned_data = self.cleaned_data
|
||
|
title1 = cleaned_data.get("title1")
|
||
|
title2 = cleaned_data.get("title2")
|
||
|
if title1 != title2:
|
||
|
raise forms.ValidationError("The two titles must be the same")
|
||
|
return cleaned_data
|
||
|
|
||
|
|
||
|
class TitleInline(admin.TabularInline):
|
||
|
model = Title
|
||
|
form = TitleForm
|
||
|
extra = 1
|
||
|
|
||
|
|
||
|
class Inner4StackedInline(admin.StackedInline):
|
||
|
model = Inner4Stacked
|
||
|
|
||
|
|
||
|
class Inner4TabularInline(admin.TabularInline):
|
||
|
model = Inner4Tabular
|
||
|
|
||
|
|
||
|
class Holder4Admin(admin.ModelAdmin):
|
||
|
inlines = [Inner4StackedInline, Inner4TabularInline]
|
||
|
|
||
|
|
||
|
class InlineWeakness(admin.TabularInline):
|
||
|
model = ShoppingWeakness
|
||
|
extra = 1
|
||
|
|
||
|
|
||
|
class QuestionInline(admin.TabularInline):
|
||
|
model = Question
|
||
|
readonly_fields=['call_me']
|
||
|
|
||
|
def call_me(self, obj):
|
||
|
return 'Callable in QuestionInline'
|
||
|
|
||
|
|
||
|
class PollAdmin(admin.ModelAdmin):
|
||
|
inlines = [QuestionInline]
|
||
|
|
||
|
def call_me(self, obj):
|
||
|
return 'Callable in PollAdmin'
|
||
|
|
||
|
|
||
|
class ChapterInline(admin.TabularInline):
|
||
|
model = Chapter
|
||
|
readonly_fields=['call_me']
|
||
|
|
||
|
def call_me(self, obj):
|
||
|
return 'Callable in ChapterInline'
|
||
|
|
||
|
|
||
|
class NovelAdmin(admin.ModelAdmin):
|
||
|
inlines = [ChapterInline]
|
||
|
|
||
|
|
||
|
site.register(TitleCollection, inlines=[TitleInline])
|
||
|
# Test bug #12561 and #12778
|
||
|
# only ModelAdmin media
|
||
|
site.register(Holder, HolderAdmin, inlines=[InnerInline])
|
||
|
# ModelAdmin and Inline media
|
||
|
site.register(Holder2, HolderAdmin, inlines=[InnerInline2])
|
||
|
# only Inline media
|
||
|
site.register(Holder3, inlines=[InnerInline3])
|
||
|
|
||
|
site.register(Poll, PollAdmin)
|
||
|
site.register(Novel, NovelAdmin)
|
||
|
site.register(Fashionista, inlines=[InlineWeakness])
|
||
|
site.register(Holder4, Holder4Admin)
|
||
|
site.register(Author, AuthorAdmin)
|