thirdparty/google_appengine/lib/django/tests/modeltests/manipulators/models.py
changeset 2866 a04b1e4126c4
parent 2864 2e0b0af889be
child 2868 9f7f269383f7
equal deleted inserted replaced
2864:2e0b0af889be 2866:a04b1e4126c4
     1 """
       
     2 27. Default manipulators
       
     3 
       
     4 Each model gets an AddManipulator and ChangeManipulator by default.
       
     5 """
       
     6 
       
     7 from django.db import models
       
     8 
       
     9 class Musician(models.Model):
       
    10     first_name = models.CharField(maxlength=30)
       
    11     last_name = models.CharField(maxlength=30)
       
    12 
       
    13     def __str__(self):
       
    14         return "%s %s" % (self.first_name, self.last_name)
       
    15 
       
    16 class Album(models.Model):
       
    17     name = models.CharField(maxlength=100)
       
    18     musician = models.ForeignKey(Musician)
       
    19     release_date = models.DateField(blank=True, null=True)
       
    20 
       
    21     def __str__(self):
       
    22         return self.name
       
    23 
       
    24 __test__ = {'API_TESTS':"""
       
    25 >>> from django.utils.datastructures import MultiValueDict
       
    26 
       
    27 # Create a Musician object via the default AddManipulator.
       
    28 >>> man = Musician.AddManipulator()
       
    29 >>> data = MultiValueDict({'first_name': ['Ella'], 'last_name': ['Fitzgerald']})
       
    30 
       
    31 >>> man.get_validation_errors(data)
       
    32 {}
       
    33 >>> man.do_html2python(data)
       
    34 >>> m1 = man.save(data)
       
    35 
       
    36 # Verify it worked.
       
    37 >>> Musician.objects.all()
       
    38 [<Musician: Ella Fitzgerald>]
       
    39 >>> [m1] == list(Musician.objects.all())
       
    40 True
       
    41 
       
    42 # Attempt to add a Musician without a first_name.
       
    43 >>> man.get_validation_errors(MultiValueDict({'last_name': ['Blakey']}))
       
    44 {'first_name': ['This field is required.']}
       
    45 
       
    46 # Attempt to add a Musician without a first_name and last_name.
       
    47 >>> man.get_validation_errors(MultiValueDict({}))
       
    48 {'first_name': ['This field is required.'], 'last_name': ['This field is required.']}
       
    49 
       
    50 # Attempt to create an Album without a name or musician.
       
    51 >>> man = Album.AddManipulator()
       
    52 >>> man.get_validation_errors(MultiValueDict({}))
       
    53 {'musician': ['This field is required.'], 'name': ['This field is required.']}
       
    54 
       
    55 # Attempt to create an Album with an invalid musician.
       
    56 >>> man.get_validation_errors(MultiValueDict({'name': ['Sallies Fforth'], 'musician': ['foo']}))
       
    57 {'musician': ["Select a valid choice; 'foo' is not in ['', '1']."]}
       
    58 
       
    59 # Attempt to create an Album with an invalid release_date.
       
    60 >>> man.get_validation_errors(MultiValueDict({'name': ['Sallies Fforth'], 'musician': ['1'], 'release_date': 'today'}))
       
    61 {'release_date': ['Enter a valid date in YYYY-MM-DD format.']}
       
    62 
       
    63 # Create an Album without a release_date (because it's optional).
       
    64 >>> data = MultiValueDict({'name': ['Ella and Basie'], 'musician': ['1']})
       
    65 >>> man.get_validation_errors(data)
       
    66 {}
       
    67 >>> man.do_html2python(data)
       
    68 >>> a1 = man.save(data)
       
    69 
       
    70 # Verify it worked.
       
    71 >>> Album.objects.all()
       
    72 [<Album: Ella and Basie>]
       
    73 >>> Album.objects.get().musician
       
    74 <Musician: Ella Fitzgerald>
       
    75 
       
    76 # Create an Album with a release_date.
       
    77 >>> data = MultiValueDict({'name': ['Ultimate Ella'], 'musician': ['1'], 'release_date': ['2005-02-13']})
       
    78 >>> man.get_validation_errors(data)
       
    79 {}
       
    80 >>> man.do_html2python(data)
       
    81 >>> a2 = man.save(data)
       
    82 
       
    83 # Verify it worked.
       
    84 >>> Album.objects.order_by('name')
       
    85 [<Album: Ella and Basie>, <Album: Ultimate Ella>]
       
    86 >>> a2 = Album.objects.get(pk=2)
       
    87 >>> a2
       
    88 <Album: Ultimate Ella>
       
    89 >>> a2.release_date
       
    90 datetime.date(2005, 2, 13)
       
    91 """}