thirdparty/google_appengine/lib/django/tests/regressiontests/invalid_admin_options/models.py
changeset 2866 a04b1e4126c4
parent 2864 2e0b0af889be
child 2868 9f7f269383f7
equal deleted inserted replaced
2864:2e0b0af889be 2866:a04b1e4126c4
     1 """
       
     2 Admin options
       
     3 
       
     4 Test invalid and valid admin options to make sure that
       
     5 model validation is working properly. 
       
     6 """
       
     7 
       
     8 from django.db import models
       
     9 model_errors = ""
       
    10 
       
    11 # TODO: Invalid admin options should not cause a metaclass error
       
    12 ##This should fail gracefully but is causing a metaclass error
       
    13 #class BadAdminOption(models.Model):
       
    14 #    "Test nonexistent admin option"
       
    15 #    name = models.CharField(maxlength=30)
       
    16 #    
       
    17 #    class Admin:
       
    18 #        nonexistent = 'option'
       
    19 #
       
    20 #model_errors += """invalid_admin_options.badadminoption: "admin" attribute, if given, must be set to a models.AdminOptions() instance.
       
    21 #"""
       
    22         
       
    23 class ListDisplayBadOne(models.Model):
       
    24     "Test list_display, list_display must be a list or tuple"
       
    25     first_name = models.CharField(maxlength=30)
       
    26 
       
    27     class Admin:
       
    28         list_display = 'first_name'
       
    29 
       
    30 model_errors += """invalid_admin_options.listdisplaybadone: "admin.list_display", if given, must be set to a list or tuple.
       
    31 """
       
    32 
       
    33 class ListDisplayBadTwo(models.Model):
       
    34     "Test list_display, list_display items must be attributes, methods or properties."
       
    35     first_name = models.CharField(maxlength=30)
       
    36 
       
    37     class Admin:
       
    38         list_display = ['first_name','nonexistent']
       
    39 
       
    40 model_errors += """invalid_admin_options.listdisplaybadtwo: "admin.list_display" refers to 'nonexistent', which isn't an attribute, method or property.
       
    41 """        
       
    42 class ListDisplayBadThree(models.Model):
       
    43     "Test list_display, list_display items can not be a ManyToManyField."
       
    44     first_name = models.CharField(maxlength=30)
       
    45     nick_names = models.ManyToManyField('ListDisplayGood')
       
    46 
       
    47     class Admin:
       
    48         list_display = ['first_name','nick_names']
       
    49         
       
    50 model_errors += """invalid_admin_options.listdisplaybadthree: "admin.list_display" doesn't support ManyToManyFields ('nick_names').
       
    51 """ 
       
    52       
       
    53 class ListDisplayGood(models.Model):
       
    54     "Test list_display, Admin list_display can be a attribute, method or property."
       
    55     first_name = models.CharField(maxlength=30)
       
    56     
       
    57     def _last_name(self):
       
    58         return self.first_name
       
    59     last_name = property(_last_name)
       
    60     
       
    61     def full_name(self):
       
    62         return "%s %s" % (self.first_name, self.last_name)
       
    63 
       
    64     class Admin:
       
    65         list_display = ['first_name','last_name','full_name']
       
    66        
       
    67 class ListDisplayLinksBadOne(models.Model):
       
    68     "Test list_display_links, item must be included in list_display."
       
    69     first_name = models.CharField(maxlength=30)
       
    70     last_name = models.CharField(maxlength=30)
       
    71     
       
    72     class Admin:
       
    73         list_display = ['last_name']
       
    74         list_display_links = ['first_name']
       
    75 
       
    76 model_errors += """invalid_admin_options.listdisplaylinksbadone: "admin.list_display_links" refers to 'first_name', which is not defined in "admin.list_display".
       
    77 """
       
    78 
       
    79 class ListDisplayLinksBadTwo(models.Model):
       
    80     "Test list_display_links, must be a list or tuple."
       
    81     first_name = models.CharField(maxlength=30)
       
    82     last_name = models.CharField(maxlength=30)
       
    83     
       
    84     class Admin:
       
    85         list_display = ['first_name','last_name']
       
    86         list_display_links = 'last_name'    
       
    87 
       
    88 model_errors += """invalid_admin_options.listdisplaylinksbadtwo: "admin.list_display_links", if given, must be set to a list or tuple.
       
    89 """
       
    90 
       
    91 # TODO: Fix list_display_links validation or remove the check for list_display
       
    92 ## This is failing but the validation which should fail is not.
       
    93 #class ListDisplayLinksBadThree(models.Model):
       
    94 #    "Test list_display_links, must define list_display to use list_display_links."
       
    95 #    first_name = models.CharField(maxlength=30)
       
    96 #    last_name = models.CharField(maxlength=30)
       
    97 #    
       
    98 #    class Admin:
       
    99 #        list_display_links = ('first_name',)
       
   100 #
       
   101 #model_errors += """invalid_admin_options.listdisplaylinksbadthree: "admin.list_display" must be defined for "admin.list_display_links" to be used.
       
   102 #"""
       
   103         
       
   104 class ListDisplayLinksGood(models.Model):
       
   105     "Test list_display_links, Admin list_display_list can be a attribute, method or property."
       
   106     first_name = models.CharField(maxlength=30)
       
   107     
       
   108     def _last_name(self):
       
   109         return self.first_name
       
   110     last_name = property(_last_name)
       
   111     
       
   112     def full_name(self):
       
   113         return "%s %s" % (self.first_name, self.last_name)
       
   114 
       
   115     class Admin:
       
   116         list_display = ['first_name','last_name','full_name']
       
   117         list_display_links = ['first_name','last_name','full_name']
       
   118 
       
   119 class ListFilterBadOne(models.Model):
       
   120     "Test list_filter, must be a list or tuple."
       
   121     first_name = models.CharField(maxlength=30)
       
   122     
       
   123     class Admin:
       
   124         list_filter = 'first_name'     
       
   125 
       
   126 model_errors += """invalid_admin_options.listfilterbadone: "admin.list_filter", if given, must be set to a list or tuple.
       
   127 """
       
   128 
       
   129 class ListFilterBadTwo(models.Model):
       
   130     "Test list_filter, must be a field not a property or method."
       
   131     first_name = models.CharField(maxlength=30)
       
   132     
       
   133     def _last_name(self):
       
   134         return self.first_name
       
   135     last_name = property(_last_name)
       
   136     
       
   137     def full_name(self):
       
   138         return "%s %s" % (self.first_name, self.last_name)
       
   139 
       
   140     class Admin:
       
   141         list_filter = ['first_name','last_name','full_name']
       
   142 
       
   143 model_errors += """invalid_admin_options.listfilterbadtwo: "admin.list_filter" refers to 'last_name', which isn't a field.
       
   144 invalid_admin_options.listfilterbadtwo: "admin.list_filter" refers to 'full_name', which isn't a field.
       
   145 """
       
   146 
       
   147 class DateHierarchyBadOne(models.Model):
       
   148     "Test date_hierarchy, must be a date or datetime field."
       
   149     first_name = models.CharField(maxlength=30)
       
   150     birth_day = models.DateField()
       
   151     
       
   152     class Admin:
       
   153         date_hierarchy = 'first_name'
       
   154         
       
   155 # TODO: Date Hierarchy needs to check if field is a date/datetime field.
       
   156 #model_errors += """invalid_admin_options.datehierarchybadone: "admin.date_hierarchy" refers to 'first_name', which isn't a date field or datetime field.
       
   157 #"""
       
   158 
       
   159 class DateHierarchyBadTwo(models.Model):
       
   160     "Test date_hieracrhy, must be a field."
       
   161     first_name = models.CharField(maxlength=30)
       
   162     birth_day = models.DateField()
       
   163     
       
   164     class Admin:
       
   165         date_hierarchy = 'nonexistent'          
       
   166 
       
   167 model_errors += """invalid_admin_options.datehierarchybadtwo: "admin.date_hierarchy" refers to 'nonexistent', which isn't a field.
       
   168 """
       
   169 
       
   170 class DateHierarchyGood(models.Model):
       
   171     "Test date_hieracrhy, must be a field."
       
   172     first_name = models.CharField(maxlength=30)
       
   173     birth_day = models.DateField()
       
   174     
       
   175     class Admin:
       
   176         date_hierarchy = 'birth_day' 
       
   177       
       
   178 class SearchFieldsBadOne(models.Model):
       
   179     "Test search_fields, must be a list or tuple."
       
   180     first_name = models.CharField(maxlength=30)
       
   181     
       
   182     class Admin:
       
   183         search_fields = ('nonexistent')         
       
   184 
       
   185 # TODO: Add search_fields validation
       
   186 #model_errors += """invalid_admin_options.seacrhfieldsbadone: "admin.search_fields", if given, must be set to a list or tuple.
       
   187 #"""
       
   188       
       
   189 class SearchFieldsBadTwo(models.Model):
       
   190     "Test search_fields, must be a field."
       
   191     first_name = models.CharField(maxlength=30)
       
   192 
       
   193     def _last_name(self):
       
   194         return self.first_name
       
   195     last_name = property(_last_name)
       
   196     
       
   197     class Admin:
       
   198         search_fields = ['first_name','last_name']         
       
   199 
       
   200 # TODO: Add search_fields validation
       
   201 #model_errors += """invalid_admin_options.seacrhfieldsbadone: "admin.search_fields" refers to 'last_name', which isn't a field.
       
   202 #"""
       
   203 
       
   204 class SearchFieldsGood(models.Model):
       
   205     "Test search_fields, must be a list or tuple."
       
   206     first_name = models.CharField(maxlength=30)
       
   207     last_name = models.CharField(maxlength=30)
       
   208     
       
   209     class Admin:
       
   210         search_fields = ['first_name','last_name']
       
   211 
       
   212 
       
   213 class JsBadOne(models.Model):
       
   214     "Test js, must be a list or tuple"
       
   215     name = models.CharField(maxlength=30)
       
   216     
       
   217     class Admin:
       
   218         js = 'test.js'
       
   219         
       
   220 # TODO: Add a js validator
       
   221 #model_errors += """invalid_admin_options.jsbadone: "admin.js", if given, must be set to a list or tuple.
       
   222 #"""
       
   223 
       
   224 class SaveAsBad(models.Model):
       
   225     "Test save_as, should be True or False"
       
   226     name = models.CharField(maxlength=30)
       
   227     
       
   228     class Admin:
       
   229         save_as = 'not True or False'
       
   230 
       
   231 # TODO: Add a save_as validator.       
       
   232 #model_errors += """invalid_admin_options.saveasbad: "admin.save_as", if given, must be set to True or False.
       
   233 #"""
       
   234 
       
   235 class SaveOnTopBad(models.Model):
       
   236     "Test save_on_top, should be True or False"
       
   237     name = models.CharField(maxlength=30)
       
   238     
       
   239     class Admin:
       
   240         save_on_top = 'not True or False'
       
   241 
       
   242 # TODO: Add a save_on_top validator.       
       
   243 #model_errors += """invalid_admin_options.saveontopbad: "admin.save_on_top", if given, must be set to True or False.
       
   244 #"""
       
   245 
       
   246 class ListSelectRelatedBad(models.Model):
       
   247     "Test list_select_related, should be True or False"
       
   248     name = models.CharField(maxlength=30)
       
   249     
       
   250     class Admin:
       
   251         list_select_related = 'not True or False'
       
   252 
       
   253 # TODO: Add a list_select_related validator.       
       
   254 #model_errors += """invalid_admin_options.listselectrelatebad: "admin.list_select_related", if given, must be set to True or False.
       
   255 #"""
       
   256 
       
   257 class ListPerPageBad(models.Model):
       
   258     "Test list_per_page, should be a positive integer value."
       
   259     name = models.CharField(maxlength=30)
       
   260     
       
   261     class Admin:
       
   262         list_per_page = 89.3
       
   263 
       
   264 # TODO: Add a list_per_page validator.       
       
   265 #model_errors += """invalid_admin_options.listperpagebad: "admin.list_per_page", if given, must be a positive integer.
       
   266 #"""
       
   267 
       
   268 class FieldsBadOne(models.Model):
       
   269     "Test fields, should be a tuple"
       
   270     first_name = models.CharField(maxlength=30)
       
   271     last_name = models.CharField(maxlength=30)
       
   272     
       
   273     class Admin:
       
   274         fields = 'not a tuple'
       
   275 
       
   276 # TODO: Add a fields validator.       
       
   277 #model_errors += """invalid_admin_options.fieldsbadone: "admin.fields", if given, must be a tuple.
       
   278 #"""
       
   279 
       
   280 class FieldsBadTwo(models.Model):
       
   281     """Test fields, 'fields' dict option is required."""
       
   282     first_name = models.CharField(maxlength=30)
       
   283     last_name = models.CharField(maxlength=30)
       
   284     
       
   285     class Admin:
       
   286         fields = ('Name', {'description': 'this fieldset needs fields'})
       
   287         
       
   288 # TODO: Add a fields validator.       
       
   289 #model_errors += """invalid_admin_options.fieldsbadtwo: "admin.fields" each fieldset must include a 'fields' dict.
       
   290 #"""
       
   291 
       
   292 class FieldsBadThree(models.Model):
       
   293     """Test fields, 'classes' and 'description' are the only allowable extra dict options."""
       
   294     first_name = models.CharField(maxlength=30)
       
   295     last_name = models.CharField(maxlength=30)
       
   296     
       
   297     class Admin:
       
   298         fields = ('Name', {'fields': ('first_name','last_name'),'badoption': 'verybadoption'})
       
   299 
       
   300 # TODO: Add a fields validator.       
       
   301 #model_errors += """invalid_admin_options.fieldsbadthree: "admin.fields" fieldset options must be either 'classes' or 'description'.
       
   302 #"""
       
   303 
       
   304 class FieldsGood(models.Model):
       
   305     "Test fields, working example"
       
   306     first_name = models.CharField(maxlength=30)
       
   307     last_name = models.CharField(maxlength=30)
       
   308     birth_day = models.DateField()
       
   309     
       
   310     class Admin:
       
   311         fields = (
       
   312                   ('Name', {'fields': ('first_name','last_name'),'classes': 'collapse'}),
       
   313                   (None, {'fields': ('birth_day',),'description': 'enter your b-day'})
       
   314                   )
       
   315                   
       
   316 class OrderingBad(models.Model):
       
   317     "Test ordering, must be a field."
       
   318     first_name = models.CharField(maxlength=30)
       
   319     last_name = models.CharField(maxlength=30)
       
   320     
       
   321     class Admin:
       
   322         ordering = 'nonexistent'
       
   323 
       
   324 # TODO: Add a ordering validator.       
       
   325 #model_errors += """invalid_admin_options.orderingbad: "admin.ordering" refers to 'nonexistent', which isn't a field.
       
   326 #"""
       
   327 
       
   328 ## TODO: Add a manager validator, this should fail gracefully.
       
   329 #class ManagerBad(models.Model):
       
   330 #    "Test manager, must be a manager object."
       
   331 #    first_name = models.CharField(maxlength=30)
       
   332 #    
       
   333 #    class Admin:
       
   334 #        manager = 'nonexistent'
       
   335 #       
       
   336 #model_errors += """invalid_admin_options.managerbad: "admin.manager" refers to 'nonexistent', which isn't a Manager().
       
   337 #"""