parts/django/tests/regressiontests/generic_inline_admin/models.py
changeset 307 c6bca38c1cbf
equal deleted inserted replaced
306:5ff1fc726848 307:c6bca38c1cbf
       
     1 from django.db import models
       
     2 from django.contrib import admin
       
     3 from django.contrib.contenttypes import generic
       
     4 from django.contrib.contenttypes.models import ContentType
       
     5 
       
     6 class Episode(models.Model):
       
     7     name = models.CharField(max_length=100)
       
     8 
       
     9 class Media(models.Model):
       
    10     """
       
    11     Media that can associated to any object.
       
    12     """
       
    13     content_type = models.ForeignKey(ContentType)
       
    14     object_id = models.PositiveIntegerField()
       
    15     content_object = generic.GenericForeignKey()
       
    16     url = models.URLField(verify_exists=False)
       
    17 
       
    18     def __unicode__(self):
       
    19         return self.url
       
    20 
       
    21 class MediaInline(generic.GenericTabularInline):
       
    22     model = Media
       
    23 
       
    24 class EpisodeAdmin(admin.ModelAdmin):
       
    25     inlines = [
       
    26         MediaInline,
       
    27     ]
       
    28 admin.site.register(Episode, EpisodeAdmin)
       
    29 
       
    30 #
       
    31 # These models let us test the different GenericInline settings at
       
    32 # different urls in the admin site.
       
    33 #
       
    34 
       
    35 #
       
    36 # Generic inline with extra = 0
       
    37 #
       
    38 
       
    39 class EpisodeExtra(Episode):
       
    40     pass
       
    41 
       
    42 class MediaExtraInline(generic.GenericTabularInline):
       
    43     model = Media
       
    44     extra = 0
       
    45 
       
    46 admin.site.register(EpisodeExtra, inlines=[MediaExtraInline])
       
    47 
       
    48 #
       
    49 # Generic inline with extra and max_num
       
    50 #
       
    51 
       
    52 class EpisodeMaxNum(Episode):
       
    53     pass
       
    54 
       
    55 class MediaMaxNumInline(generic.GenericTabularInline):
       
    56     model = Media
       
    57     extra = 5
       
    58     max_num = 2
       
    59 
       
    60 admin.site.register(EpisodeMaxNum, inlines=[MediaMaxNumInline])
       
    61 
       
    62 #
       
    63 # Generic inline with exclude
       
    64 #
       
    65 
       
    66 class EpisodeExclude(Episode):
       
    67     pass
       
    68 
       
    69 class MediaExcludeInline(generic.GenericTabularInline):
       
    70     model = Media
       
    71     exclude = ['url']
       
    72 
       
    73 admin.site.register(EpisodeExclude, inlines=[MediaExcludeInline])
       
    74 
       
    75 #
       
    76 # Generic inline with unique_together
       
    77 #
       
    78 
       
    79 class PhoneNumber(models.Model):
       
    80     content_type = models.ForeignKey(ContentType)
       
    81     object_id = models.PositiveIntegerField()
       
    82     content_object = generic.GenericForeignKey('content_type', 'object_id')
       
    83     phone_number = models.CharField(max_length=30)
       
    84 
       
    85     class Meta:
       
    86         unique_together = (('content_type', 'object_id', 'phone_number',),)
       
    87 
       
    88 class Contact(models.Model):
       
    89     name = models.CharField(max_length=50)
       
    90     phone_numbers = generic.GenericRelation(PhoneNumber)
       
    91 
       
    92 class PhoneNumberInline(generic.GenericTabularInline):
       
    93     model = PhoneNumber
       
    94 
       
    95 admin.site.register(Contact, inlines=[PhoneNumberInline])
       
    96 
       
    97 #
       
    98 # Generic inline with can_delete=False
       
    99 #
       
   100 
       
   101 class EpisodePermanent(Episode):
       
   102     pass
       
   103 
       
   104 class MediaPermanentInline(generic.GenericTabularInline):
       
   105     model = Media
       
   106     can_delete = False
       
   107 
       
   108 admin.site.register(EpisodePermanent, inlines=[MediaPermanentInline])