newforms: Implemented formfield() for database ForeignKey class and added unit tests
git-svn-id: http://code.djangoproject.com/svn/django/trunk@4247 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
d853278253
commit
6a75c8a52e
|
@ -548,6 +548,9 @@ class ForeignKey(RelatedField, Field):
|
||||||
def contribute_to_related_class(self, cls, related):
|
def contribute_to_related_class(self, cls, related):
|
||||||
setattr(cls, related.get_accessor_name(), ForeignRelatedObjectsDescriptor(related))
|
setattr(cls, related.get_accessor_name(), ForeignRelatedObjectsDescriptor(related))
|
||||||
|
|
||||||
|
def formfield(self):
|
||||||
|
return forms.ChoiceField(choices=self.get_choices_default(), required=not self.blank, label=capfirst(self.verbose_name))
|
||||||
|
|
||||||
class OneToOneField(RelatedField, IntegerField):
|
class OneToOneField(RelatedField, IntegerField):
|
||||||
def __init__(self, to, to_field=None, **kwargs):
|
def __init__(self, to, to_field=None, **kwargs):
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -20,9 +20,16 @@ class Category(models.Model):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
class Writer(models.Model):
|
||||||
|
name = models.CharField(maxlength=50)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
class Article(models.Model):
|
class Article(models.Model):
|
||||||
headline = models.CharField(maxlength=50)
|
headline = models.CharField(maxlength=50)
|
||||||
pub_date = models.DateTimeField()
|
pub_date = models.DateTimeField()
|
||||||
|
writer = models.ForeignKey(Writer)
|
||||||
categories = models.ManyToManyField(Category)
|
categories = models.ManyToManyField(Category)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
@ -101,12 +108,24 @@ Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
ValueError: The Category could not be created because the data didn't validate.
|
ValueError: The Category could not be created because the data didn't validate.
|
||||||
|
|
||||||
ManyToManyFields are represented by a MultipleChoiceField.
|
Create a couple of Writers.
|
||||||
|
>>> w = Writer(name='Mike Royko')
|
||||||
|
>>> w.save()
|
||||||
|
>>> w = Writer(name='Bob Woodward')
|
||||||
|
>>> w.save()
|
||||||
|
|
||||||
|
ManyToManyFields are represented by a MultipleChoiceField, and ForeignKeys are
|
||||||
|
represented by a ChoiceField.
|
||||||
>>> ArticleForm = form_for_model(Article)
|
>>> ArticleForm = form_for_model(Article)
|
||||||
>>> f = ArticleForm(auto_id=False)
|
>>> f = ArticleForm(auto_id=False)
|
||||||
>>> print f
|
>>> print f
|
||||||
<tr><th>Headline:</th><td><input type="text" name="headline" maxlength="50" /></td></tr>
|
<tr><th>Headline:</th><td><input type="text" name="headline" maxlength="50" /></td></tr>
|
||||||
<tr><th>Pub date:</th><td><input type="text" name="pub_date" /></td></tr>
|
<tr><th>Pub date:</th><td><input type="text" name="pub_date" /></td></tr>
|
||||||
|
<tr><th>Writer:</th><td><select name="writer">
|
||||||
|
<option value="" selected="selected">---------</option>
|
||||||
|
<option value="1">Mike Royko</option>
|
||||||
|
<option value="2">Bob Woodward</option>
|
||||||
|
</select></td></tr>
|
||||||
<tr><th>Categories:</th><td><select multiple="multiple" name="categories">
|
<tr><th>Categories:</th><td><select multiple="multiple" name="categories">
|
||||||
<option value="1">Entertainment</option>
|
<option value="1">Entertainment</option>
|
||||||
<option value="2">It's a test</option>
|
<option value="2">It's a test</option>
|
||||||
|
|
Loading…
Reference in New Issue