Commit f4abba52 authored by Claude Paroz's avatar Claude Paroz
Browse files

Fixed #18367 -- Allowed LayerMapping to store strings in TextField.

Thanks geoffhing@gmail.com for the report.
parent f1ebcdc7
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ class CountyFeat(models.Model):

class City(models.Model):
    name = models.CharField(max_length=25)
    name_txt = models.TextField(default='')
    population = models.IntegerField()
    density = models.DecimalField(max_digits=7, decimal_places=1)
    dt = models.DateField()
+9 −0
Original line number Diff line number Diff line
@@ -272,3 +272,12 @@ class LayerMapTest(TestCase):
        lm = LayerMapping(Invalid, invalid_shp, invalid_mapping,
                          source_srs=4326)
        lm.save(silent=True)

    def test_textfield(self):
        "Tests that String content fits also in a TextField"
        mapping = copy(city_mapping)
        mapping['name_txt'] = 'Name'
        lm = LayerMapping(City, city_shp, mapping)
        lm.save(silent=True, strict=True)
        self.assertEqual(City.objects.count(), 3)
        self.assertEqual(City.objects.all().order_by('name_txt')[0].name_txt, "Houston")
+1 −1
Original line number Diff line number Diff line
@@ -332,7 +332,7 @@ class LayerMapping(object):
                val = unicode(ogr_field.value, self.encoding)
            else:
                val = ogr_field.value
                if len(val) > model_field.max_length:
                if model_field.max_length and len(val) > model_field.max_length:
                    raise InvalidString('%s model field maximum string length is %s, given %s characters.' %
                                        (model_field.name, model_field.max_length, len(val)))
        elif isinstance(ogr_field, OFTReal) and isinstance(model_field, models.DecimalField):