summaryrefslogtreecommitdiff
path: root/tests/regressiontests/forms
diff options
context:
space:
mode:
Diffstat (limited to 'tests/regressiontests/forms')
-rw-r--r--tests/regressiontests/forms/models.py13
-rw-r--r--tests/regressiontests/forms/tests/regressions.py21
2 files changed, 34 insertions, 0 deletions
diff --git a/tests/regressiontests/forms/models.py b/tests/regressiontests/forms/models.py
index 0a0fea45ad..203980c11c 100644
--- a/tests/regressiontests/forms/models.py
+++ b/tests/regressiontests/forms/models.py
@@ -5,28 +5,34 @@ import tempfile
from django.db import models
from django.core.files.storage import FileSystemStorage
+
temp_storage_location = tempfile.mkdtemp()
temp_storage = FileSystemStorage(location=temp_storage_location)
+
class BoundaryModel(models.Model):
positive_integer = models.PositiveIntegerField(null=True, blank=True)
+
callable_default_value = 0
def callable_default():
global callable_default_value
callable_default_value = callable_default_value + 1
return callable_default_value
+
class Defaults(models.Model):
name = models.CharField(max_length=255, default='class default value')
def_date = models.DateField(default = datetime.date(1980, 1, 1))
value = models.IntegerField(default=42)
callable_default = models.IntegerField(default=callable_default)
+
class ChoiceModel(models.Model):
"""For ModelChoiceField and ModelMultipleChoiceField tests."""
name = models.CharField(max_length=10)
+
class ChoiceOptionModel(models.Model):
"""Destination for ChoiceFieldModel's ForeignKey.
Can't reuse ChoiceModel because error_message tests require that it have no instances."""
@@ -38,6 +44,7 @@ class ChoiceOptionModel(models.Model):
def __unicode__(self):
return u'ChoiceOption %d' % self.pk
+
class ChoiceFieldModel(models.Model):
"""Model with ForeignKey to another model, for testing ModelForm
generation with ModelChoiceField."""
@@ -51,11 +58,17 @@ class ChoiceFieldModel(models.Model):
multi_choice_int = models.ManyToManyField(ChoiceOptionModel, blank=False, related_name='multi_choice_int',
default=lambda: [1])
+
class FileModel(models.Model):
file = models.FileField(storage=temp_storage, upload_to='tests')
+
class Group(models.Model):
name = models.CharField(max_length=10)
def __unicode__(self):
return u'%s' % self.name
+
+
+class Cheese(models.Model):
+ name = models.CharField(max_length=100)
diff --git a/tests/regressiontests/forms/tests/regressions.py b/tests/regressiontests/forms/tests/regressions.py
index 84319cd313..4b475913fe 100644
--- a/tests/regressiontests/forms/tests/regressions.py
+++ b/tests/regressiontests/forms/tests/regressions.py
@@ -3,6 +3,9 @@ from unittest import TestCase
from django.forms import *
from django.utils.translation import ugettext_lazy, activate, deactivate
+from regressiontests.forms.models import Cheese
+
+
class FormsRegressionsTestCase(TestCase):
def test_class(self):
# Tests to prevent against recurrences of earlier bugs.
@@ -120,3 +123,21 @@ class FormsRegressionsTestCase(TestCase):
f = SomeForm({'field': ['<script>']})
self.assertEqual(t.render(Context({'form': f})), u'<ul class="errorlist"><li>field<ul class="errorlist"><li>&quot;&lt;script&gt;&quot; is not a valid value for a primary key.</li></ul></li></ul>')
+
+ def test_regression_14234(self):
+ """
+ Re-cleaning an instance that was added via a ModelForm should not raise
+ a pk uniqueness error.
+
+ """
+ class CheeseForm(ModelForm):
+ class Meta:
+ model = Cheese
+
+ form = CheeseForm({
+ 'name': 'Brie',
+ })
+ if form.is_valid():
+ obj = form.save()
+ obj.name = 'Camembert'
+ obj.full_clean()