diff --git a/django/db/backends/postgresql/operations.py b/django/db/backends/postgresql/operations.py index 20392b238ef62..2c40b1160796e 100644 --- a/django/db/backends/postgresql/operations.py +++ b/django/db/backends/postgresql/operations.py @@ -27,6 +27,11 @@ def date_trunc_sql(self, lookup_type, field_name): def deferrable_sql(self): return " DEFERRABLE INITIALLY DEFERRED" + def field_cast_sql(self, db_type): + if db_type == 'inet': + return 'CAST(%s AS TEXT)' + return '%s' + def last_insert_id(self, cursor, table_name, pk_name): cursor.execute("SELECT CURRVAL('\"%s_%s_seq\"')" % (table_name, pk_name)) return cursor.fetchone()[0] diff --git a/tests/regressiontests/string_lookup/models.py b/tests/regressiontests/string_lookup/models.py index 9deeb18763a95..1bdb2d4452b20 100644 --- a/tests/regressiontests/string_lookup/models.py +++ b/tests/regressiontests/string_lookup/models.py @@ -39,6 +39,7 @@ def __unicode__(self): class Article(models.Model): name = models.CharField(max_length=50) text = models.TextField() + submitted_from = models.IPAddressField(blank=True, null=True) def __str__(self): return "Article %s" % self.name @@ -98,4 +99,11 @@ def __str__(self): >>> Article.objects.get(text__contains='quick brown fox') + +# Regression test for #708: "like" queries on IP address fields require casting +# to text (on PostgreSQL). +>>> Article(name='IP test', text='The body', submitted_from='192.0.2.100').save() +>>> Article.objects.filter(submitted_from__contains='192.0.2') +[] + """}