mirror of
				https://github.com/django/django.git
				synced 2025-10-30 09:06:13 +00:00 
			
		
		
		
	git-svn-id: http://code.djangoproject.com/svn/django/trunk@15650 bcc190cf-cafb-0310-a4f2-bffc1f526a37
		
			
				
	
	
		
			194 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """
 | |
| Testing of admin inline formsets.
 | |
| 
 | |
| """
 | |
| from django.db import models
 | |
| from django.contrib import admin
 | |
| from django.contrib.contenttypes.models import ContentType
 | |
| from django.contrib.contenttypes import generic
 | |
| from django import forms
 | |
| 
 | |
| class Parent(models.Model):
 | |
|     name = models.CharField(max_length=50)
 | |
| 
 | |
|     def __unicode__(self):
 | |
|         return self.name
 | |
| 
 | |
| class Teacher(models.Model):
 | |
|     name = models.CharField(max_length=50)
 | |
| 
 | |
|     def __unicode__(self):
 | |
|         return self.name
 | |
| 
 | |
| class Child(models.Model):
 | |
|     name = models.CharField(max_length=50)
 | |
|     teacher = models.ForeignKey(Teacher)
 | |
| 
 | |
|     content_type = models.ForeignKey(ContentType)
 | |
|     object_id = models.PositiveIntegerField()
 | |
|     parent = generic.GenericForeignKey()
 | |
| 
 | |
|     def __unicode__(self):
 | |
|         return u'I am %s, a child of %s' % (self.name, self.parent)
 | |
| 
 | |
| class Book(models.Model):
 | |
|     name = models.CharField(max_length=50)
 | |
| 
 | |
| class Author(models.Model):
 | |
|     name = models.CharField(max_length=50)
 | |
|     books = models.ManyToManyField(Book)
 | |
| 
 | |
| class BookInline(admin.TabularInline):
 | |
|     model = Author.books.through
 | |
| 
 | |
| class AuthorAdmin(admin.ModelAdmin):
 | |
|     inlines = [BookInline]
 | |
| 
 | |
| admin.site.register(Author, AuthorAdmin)
 | |
| 
 | |
| class Holder(models.Model):
 | |
|     dummy = models.IntegerField()
 | |
| 
 | |
| 
 | |
| class Inner(models.Model):
 | |
|     dummy = models.IntegerField()
 | |
|     holder = models.ForeignKey(Holder)
 | |
|     readonly = models.CharField("Inner readonly label", max_length=1)
 | |
| 
 | |
| 
 | |
| class InnerInline(admin.StackedInline):
 | |
|     model = Inner
 | |
|     can_delete = False
 | |
|     readonly_fields = ('readonly',) # For bug #13174 tests.
 | |
| 
 | |
| 
 | |
| class Holder2(models.Model):
 | |
|     dummy = models.IntegerField()
 | |
| 
 | |
| 
 | |
| class Inner2(models.Model):
 | |
|     dummy = models.IntegerField()
 | |
|     holder = models.ForeignKey(Holder2)
 | |
| 
 | |
| 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 Holder3(models.Model):
 | |
|     dummy = models.IntegerField()
 | |
| 
 | |
| 
 | |
| class Inner3(models.Model):
 | |
|     dummy = models.IntegerField()
 | |
|     holder = models.ForeignKey(Holder3)
 | |
| 
 | |
| class InnerInline3(admin.StackedInline):
 | |
|     model = Inner3
 | |
| 
 | |
|     class Media:
 | |
|         js = ('my_awesome_inline_scripts.js',)
 | |
| 
 | |
| # Test bug #12561 and #12778
 | |
| # only ModelAdmin media
 | |
| admin.site.register(Holder, HolderAdmin, inlines=[InnerInline])
 | |
| # ModelAdmin and Inline media
 | |
| admin.site.register(Holder2, HolderAdmin, inlines=[InnerInline2])
 | |
| # only Inline media
 | |
| admin.site.register(Holder3, inlines=[InnerInline3])
 | |
| 
 | |
| # Models for #12749
 | |
| 
 | |
| class Person(models.Model):
 | |
|     firstname = models.CharField(max_length=15)
 | |
| 
 | |
| class OutfitItem(models.Model):
 | |
|     name = models.CharField(max_length=15)
 | |
| 
 | |
| class Fashionista(models.Model):
 | |
|     person = models.OneToOneField(Person, primary_key=True)
 | |
|     weaknesses = models.ManyToManyField(OutfitItem, through='ShoppingWeakness', blank=True)
 | |
| 
 | |
| class ShoppingWeakness(models.Model):
 | |
|     fashionista = models.ForeignKey(Fashionista)
 | |
|     item = models.ForeignKey(OutfitItem)
 | |
| 
 | |
| class InlineWeakness(admin.TabularInline):
 | |
|     model = ShoppingWeakness
 | |
|     extra = 1
 | |
| 
 | |
| admin.site.register(Fashionista, inlines=[InlineWeakness])
 | |
| 
 | |
| # Models for #13510
 | |
| 
 | |
| class TitleCollection(models.Model):
 | |
|     pass
 | |
| 
 | |
| class Title(models.Model):
 | |
|     collection = models.ForeignKey(TitleCollection, blank=True, null=True)
 | |
|     title1 = models.CharField(max_length=100)
 | |
|     title2 = models.CharField(max_length=100)
 | |
| 
 | |
| 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
 | |
| 
 | |
| admin.site.register(TitleCollection, inlines=[TitleInline])
 | |
| 
 | |
| # Models for #15424
 | |
| 
 | |
| class Poll(models.Model):
 | |
|     name = models.CharField(max_length=40)
 | |
| 
 | |
| class Question(models.Model):
 | |
|     poll = models.ForeignKey(Poll)
 | |
| 
 | |
| 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 Novel(models.Model):
 | |
|     name = models.CharField(max_length=40)
 | |
| 
 | |
| class Chapter(models.Model):
 | |
|     novel = models.ForeignKey(Novel)
 | |
| 
 | |
| 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]
 | |
| 
 | |
| admin.site.register(Poll, PollAdmin)
 | |
| admin.site.register(Novel, NovelAdmin)
 |