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 """} |
|