123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- from django.contrib import admin
- from django import forms
- from .models import (
- Author, BinaryTree, CapoFamiglia, Chapter, ChildModel1, ChildModel2,
- Consigliere, EditablePKBook, ExtraTerrestrial, Fashionista, Holder,
- Holder2, Holder3, Holder4, Inner, Inner2, Inner3, Inner4Stacked,
- Inner4Tabular, NonAutoPKBook, Novel, ParentModelWithCustomPk, Poll,
- Profile, ProfileCollection, Question, ReadOnlyInline, ShoppingWeakness,
- Sighting, SomeChildModel, SomeParentModel, SottoCapo, Title,
- TitleCollection,
- )
- site = admin.AdminSite(name="admin")
- class BookInline(admin.TabularInline):
- model = Author.books.through
- class NonAutoPKBookTabularInline(admin.TabularInline):
- model = NonAutoPKBook
- class NonAutoPKBookStackedInline(admin.StackedInline):
- model = NonAutoPKBook
- class EditablePKBookTabularInline(admin.TabularInline):
- model = EditablePKBook
- class EditablePKBookStackedInline(admin.StackedInline):
- model = EditablePKBook
- class AuthorAdmin(admin.ModelAdmin):
- inlines = [BookInline,
- NonAutoPKBookTabularInline, NonAutoPKBookStackedInline,
- EditablePKBookTabularInline, EditablePKBookStackedInline]
- 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 ReadOnlyInlineInline(admin.TabularInline):
- model = ReadOnlyInline
- readonly_fields = ['name']
- 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
- show_change_link = True
- class Inner4TabularInline(admin.TabularInline):
- model = Inner4Tabular
- show_change_link = True
- 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]
- class ConsigliereInline(admin.TabularInline):
- model = Consigliere
- class SottoCapoInline(admin.TabularInline):
- model = SottoCapo
- class ProfileInline(admin.TabularInline):
- model = Profile
- extra = 1
- # admin for #18433
- class ChildModel1Inline(admin.TabularInline):
- model = ChildModel1
- class ChildModel2Inline(admin.StackedInline):
- model = ChildModel2
- # admin for #19425 and #18388
- class BinaryTreeAdmin(admin.TabularInline):
- model = BinaryTree
- def get_extra(self, request, obj=None, **kwargs):
- extra = 2
- if obj:
- return extra - obj.binarytree_set.count()
- return extra
- def get_max_num(self, request, obj=None, **kwargs):
- max_num = 3
- if obj:
- return max_num - obj.binarytree_set.count()
- return max_num
- # admin for #19524
- class SightingInline(admin.TabularInline):
- model = Sighting
- # admin and form for #18263
- class SomeChildModelForm(forms.ModelForm):
- class Meta:
- fields = '__all__'
- model = SomeChildModel
- widgets = {
- 'position': forms.HiddenInput,
- }
- class SomeChildModelInline(admin.TabularInline):
- model = SomeChildModel
- form = SomeChildModelForm
- 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)
- site.register(CapoFamiglia, inlines=[ConsigliereInline, SottoCapoInline, ReadOnlyInlineInline])
- site.register(ProfileCollection, inlines=[ProfileInline])
- site.register(ParentModelWithCustomPk, inlines=[ChildModel1Inline, ChildModel2Inline])
- site.register(BinaryTree, inlines=[BinaryTreeAdmin])
- site.register(ExtraTerrestrial, inlines=[SightingInline])
- site.register(SomeParentModel, inlines=[SomeChildModelInline])
- site.register([Question, Inner4Stacked, Inner4Tabular])
|