diff options
| author | Brian Rosner <brosner@gmail.com> | 2008-09-01 22:43:38 +0000 |
|---|---|---|
| committer | Brian Rosner <brosner@gmail.com> | 2008-09-01 22:43:38 +0000 |
| commit | ce47d4ab830bb96fe9325b9ccd077619116fd548 (patch) | |
| tree | 6e061d6596a3d0155db45b6a06f28d2cc0b1d4cc /tests | |
| parent | dcb0e8f959148331cde89def02ce28be3b248039 (diff) | |
Fixed #8648 -- Admin no longer ignores to_field. Thanks for the help Karen Tracey and SmileyChris.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8823 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/modeltests/model_forms/models.py | 43 | ||||
| -rw-r--r-- | tests/regressiontests/admin_widgets/models.py | 23 |
2 files changed, 61 insertions, 5 deletions
diff --git a/tests/modeltests/model_forms/models.py b/tests/modeltests/model_forms/models.py index a11972d431..b6c666307a 100644 --- a/tests/modeltests/model_forms/models.py +++ b/tests/modeltests/model_forms/models.py @@ -78,7 +78,7 @@ class BetterWriter(Writer): class WriterProfile(models.Model): writer = models.OneToOneField(Writer, primary_key=True) age = models.PositiveIntegerField() - + def __unicode__(self): return "%s is %s" % (self.writer, self.age) @@ -137,7 +137,14 @@ class Price(models.Model): class ArticleStatus(models.Model): status = models.CharField(max_length=2, choices=ARTICLE_STATUS_CHAR, blank=True, null=True) +class Inventory(models.Model): + barcode = models.PositiveIntegerField(unique=True) + parent = models.ForeignKey('self', to_field='barcode', blank=True, null=True) + name = models.CharField(blank=False, max_length=20) + def __unicode__(self): + return self.name + __test__ = {'API_TESTS': """ >>> from django import forms >>> from django.forms.models import ModelForm, model_to_dict @@ -1135,7 +1142,7 @@ u'1,2,3' Traceback (most recent call last): ... ValidationError: [u'Enter only digits separated by commas.'] ->>> f.clean(',,,,') +>>> f.clean(',,,,') u',,,,' >>> f.clean('1.2') Traceback (most recent call last): @@ -1204,4 +1211,36 @@ Traceback (most recent call last): ... ValidationError: [u'Select a valid choice. z is not one of the available choices.'] +# Foreign keys which use to_field ############################################# + +>>> apple = Inventory.objects.create(barcode=86, name='Apple') +>>> pear = Inventory.objects.create(barcode=22, name='Pear') +>>> core = Inventory.objects.create(barcode=87, name='Core', parent=apple) + +>>> field = ModelChoiceField(Inventory.objects.all(), to_field_name='barcode') +>>> for choice in field.choices: +... print choice +(u'', u'---------') +(86, u'Apple') +(22, u'Pear') +(87, u'Core') + +>>> class InventoryForm(ModelForm): +... class Meta: +... model = Inventory +>>> form = InventoryForm(instance=core) +>>> print form['parent'] +<select name="parent" id="id_parent"> +<option value="">---------</option> +<option value="86" selected="selected">Apple</option> +<option value="22">Pear</option> +<option value="87">Core</option> +</select> + +>>> data = model_to_dict(core) +>>> data['parent'] = '22' +>>> form = InventoryForm(data=data, instance=core) +>>> core = form.save() +>>> core.parent +<Inventory: Pear> """} diff --git a/tests/regressiontests/admin_widgets/models.py b/tests/regressiontests/admin_widgets/models.py index e178a750e3..2bc907557a 100644 --- a/tests/regressiontests/admin_widgets/models.py +++ b/tests/regressiontests/admin_widgets/models.py @@ -5,14 +5,14 @@ from django.core.files.storage import default_storage class Member(models.Model): name = models.CharField(max_length=100) - + def __unicode__(self): return self.name class Band(models.Model): name = models.CharField(max_length=100) members = models.ManyToManyField(Member) - + def __unicode__(self): return self.name @@ -20,10 +20,18 @@ class Album(models.Model): band = models.ForeignKey(Band) name = models.CharField(max_length=100) cover_art = models.FileField(upload_to='albums') - + def __unicode__(self): return self.name +class Inventory(models.Model): + barcode = models.PositiveIntegerField(unique=True) + parent = models.ForeignKey('self', to_field='barcode', blank=True, null=True) + name = models.CharField(blank=False, max_length=20) + + def __unicode__(self): + return self.name + __test__ = {'WIDGETS_TESTS': """ >>> from datetime import datetime >>> from django.utils.html import escape, conditional_escape @@ -84,6 +92,15 @@ True >>> w._has_changed([1, 2], [u'1', u'3']) True +# Check that ForeignKeyRawIdWidget works with fields which aren't related to +# the model's primary key. +>>> apple = Inventory.objects.create(barcode=86, name='Apple') +>>> pear = Inventory.objects.create(barcode=22, name='Pear') +>>> core = Inventory.objects.create(barcode=87, name='Core', parent=apple) +>>> rel = Inventory._meta.get_field('parent').rel +>>> w = ForeignKeyRawIdWidget(rel) +>>> print w.render('test', core.parent_id, attrs={}) +<input type="text" name="test" value="86" class="vForeignKeyRawIdAdminField" /><a href="../../../admin_widgets/inventory/" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="/admin_media/img/admin/selector-search.gif" width="16" height="16" alt="Lookup" /></a> <strong>Apple</strong> """ % { 'ADMIN_MEDIA_PREFIX': settings.ADMIN_MEDIA_PREFIX, 'STORAGE_URL': default_storage.url(''), |
