/tests/regressiontests/generic_inline_admin/models.py
Python | 113 lines | 62 code | 29 blank | 22 comment | 0 complexity | d0eef10c8858db24cf62350d150f7c16 MD5 | raw file
Possible License(s): BSD-3-Clause
- from django.db import models
- from django.contrib import admin
- from django.contrib.contenttypes import generic
- from django.contrib.contenttypes.models import ContentType
- class Episode(models.Model):
- name = models.CharField(max_length=100)
- class Media(models.Model):
- """
- Media that can associated to any object.
- """
- content_type = models.ForeignKey(ContentType)
- object_id = models.PositiveIntegerField()
- content_object = generic.GenericForeignKey()
- url = models.URLField(verify_exists=False)
- def __unicode__(self):
- return self.url
- class MediaInline(generic.GenericTabularInline):
- model = Media
- class EpisodeAdmin(admin.ModelAdmin):
- inlines = [
- MediaInline,
- ]
- admin.site.register(Episode, EpisodeAdmin)
- #
- # These models let us test the different GenericInline settings at
- # different urls in the admin site.
- #
- #
- # Generic inline with extra = 0
- #
- class EpisodeExtra(Episode):
- pass
- class MediaExtraInline(generic.GenericTabularInline):
- model = Media
- extra = 0
- admin.site.register(EpisodeExtra, inlines=[MediaExtraInline])
- #
- # Generic inline with extra and max_num
- #
- class EpisodeMaxNum(Episode):
- pass
- class MediaMaxNumInline(generic.GenericTabularInline):
- model = Media
- extra = 5
- max_num = 2
- admin.site.register(EpisodeMaxNum, inlines=[MediaMaxNumInline])
- #
- # Generic inline with exclude
- #
- class EpisodeExclude(Episode):
- pass
- class MediaExcludeInline(generic.GenericTabularInline):
- model = Media
- exclude = ['url']
- admin.site.register(EpisodeExclude, inlines=[MediaExcludeInline])
- #
- # Generic inline with unique_together
- #
- class Category(models.Model):
- name = models.CharField(max_length=50)
- class PhoneNumber(models.Model):
- content_type = models.ForeignKey(ContentType)
- object_id = models.PositiveIntegerField()
- content_object = generic.GenericForeignKey('content_type', 'object_id')
- phone_number = models.CharField(max_length=30)
- category = models.ForeignKey(Category, null=True, blank=True)
- class Meta:
- unique_together = (('content_type', 'object_id', 'phone_number',),)
- class Contact(models.Model):
- name = models.CharField(max_length=50)
- phone_numbers = generic.GenericRelation(PhoneNumber)
- class PhoneNumberInline(generic.GenericTabularInline):
- model = PhoneNumber
- admin.site.register(Contact, inlines=[PhoneNumberInline])
- admin.site.register(Category)
- #
- # Generic inline with can_delete=False
- #
- class EpisodePermanent(Episode):
- pass
- class MediaPermanentInline(generic.GenericTabularInline):
- model = Media
- can_delete = False
- admin.site.register(EpisodePermanent, inlines=[MediaPermanentInline])