Ticket #3922: models.py

File models.py, 3.4 KB (added by Jure Cuhalev <gandalf@…>, 17 years ago)

Test for described formfield_callback problem

Line 
1from django.db import models
2
3class Category(models.Model):
4 name = models.CharField(maxlength=20)
5 url = models.CharField('The URL', maxlength=40)
6
7 def __str__(self):
8 return self.name
9
10class Writer(models.Model):
11 name = models.CharField(maxlength=50, help_text='Use both first and last names.')
12
13 def __str__(self):
14 return self.name
15
16class Article(models.Model):
17 headline = models.CharField(maxlength=50)
18 pub_date = models.DateField()
19 created = models.DateField(editable=False)
20 writer = models.ForeignKey(Writer)
21 article = models.TextField()
22 categories = models.ManyToManyField(Category, blank=True)
23
24 def save(self):
25 import datetime
26 if not self.id:
27 self.created = datetime.date.today()
28 return super(Article, self).save()
29
30 def __str__(self):
31 return self.headline
32
33class PhoneNumber(models.Model):
34 phone = models.PhoneNumberField()
35 description = models.CharField(maxlength=20)
36
37 def __str__(self):
38 return self.phone
39
40def CategoryCallback(f, **kwargs):
41 if not "cat_" in f.name:
42 f.name = 'cat_'+f.name
43 return f.formfield(**kwargs)
44
45
46__test__ = {'API_TESTS': """
47>>> from django.newforms import form_for_model, form_for_instance, save_instance, BaseForm, Form, CharField
48>>> import datetime
49
50>>> Category.objects.all()
51[]
52
53>>> CategoryForm = form_for_model(Category, formfield_callback=CategoryCallback)
54>>> f = CategoryForm()
55>>> print f
56<tr><th><label for="id_cat_name">Name:</label></th><td><input id="id_cat_name" type="text" name="cat_name" maxlength="20" /></td></tr>
57<tr><th><label for="id_cat_url">The URL:</label></th><td><input id="id_cat_url" type="text" name="cat_url" maxlength="40" /></td></tr>
58>>> print f.as_ul()
59<li><label for="id_cat_name">Name:</label> <input id="id_cat_name" type="text" name="cat_name" maxlength="20" /></li>
60<li><label for="id_cat_url">The URL:</label> <input id="id_cat_url" type="text" name="cat_url" maxlength="40" /></li>
61>>> print f['name']
62Traceback (most recent call last):
63...
64KeyError: "Key 'name' not found in Form"
65>>> print f['cat_name']
66<input id="id_cat_name" type="text" name="cat_name" maxlength="20" />
67
68# this works, if there is no ForeignKeys
69>>> Category(name="foo", url="http://www.example.com")
70<Category: foo>
71
72# this works
73>>> w = Writer(name='Bob Woodward')
74>>> Article(headline='Test article', pub_date=datetime.date(1988, 1, 4), writer=w, article='Hello.')
75<Article: Test article>
76
77# now lets try one with ForeignKey
78>>> ArticleForm = form_for_model(Article, formfield_callback=CategoryCallback)
79>>> f = ArticleForm(auto_id=False)
80>>> print f
81<tr><th>Headline:</th><td><input type="text" name="cat_headline" maxlength="50" /></td></tr>
82<tr><th>Pub date:</th><td><input type="text" name="cat_pub_date" /></td></tr>
83<tr><th>Writer:</th><td><select name="cat_writer">
84<option value="" selected="selected">---------</option>
85</select></td></tr>
86<tr><th>Article:</th><td><textarea name="cat_article"></textarea></td></tr>
87<tr><th>Categories:</th><td><select multiple="multiple" name="cat_categories">
88</select><br /> Hold down "Control", or "Command" on a Mac, to select more than one.</td></tr>
89>>> w = Writer(name='Bob Woodward')
90
91#but now the same one fails, even though Article object as itself should not be modified by for_for_model
92>>> Article(headline='Test article', pub_date=datetime.date(1988, 1, 4), writer=w, article='Hello.')
93"""}
Back to Top