diff options
Diffstat (limited to 'parts/django/tests/modeltests/reserved_names')
3 files changed, 73 insertions, 0 deletions
diff --git a/parts/django/tests/modeltests/reserved_names/__init__.py b/parts/django/tests/modeltests/reserved_names/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/parts/django/tests/modeltests/reserved_names/__init__.py diff --git a/parts/django/tests/modeltests/reserved_names/models.py b/parts/django/tests/modeltests/reserved_names/models.py new file mode 100644 index 0000000..d8c1238 --- /dev/null +++ b/parts/django/tests/modeltests/reserved_names/models.py @@ -0,0 +1,25 @@ +""" +18. Using SQL reserved names + +Need to use a reserved SQL name as a column name or table name? Need to include +a hyphen in a column or table name? No problem. Django quotes names +appropriately behind the scenes, so your database won't complain about +reserved-name usage. +""" + +from django.db import models + +class Thing(models.Model): + when = models.CharField(max_length=1, primary_key=True) + join = models.CharField(max_length=1) + like = models.CharField(max_length=1) + drop = models.CharField(max_length=1) + alter = models.CharField(max_length=1) + having = models.CharField(max_length=1) + where = models.DateField(max_length=1) + has_hyphen = models.CharField(max_length=1, db_column='has-hyphen') + class Meta: + db_table = 'select' + + def __unicode__(self): + return self.when
\ No newline at end of file diff --git a/parts/django/tests/modeltests/reserved_names/tests.py b/parts/django/tests/modeltests/reserved_names/tests.py new file mode 100644 index 0000000..b7e4867 --- /dev/null +++ b/parts/django/tests/modeltests/reserved_names/tests.py @@ -0,0 +1,48 @@ +import datetime + +from django.test import TestCase + +from models import Thing + +class ReservedNameTests(TestCase): + def generate(self): + day1 = datetime.date(2005, 1, 1) + t = Thing.objects.create(when='a', join='b', like='c', drop='d', + alter='e', having='f', where=day1, has_hyphen='h') + day2 = datetime.date(2006, 2, 2) + u = Thing.objects.create(when='h', join='i', like='j', drop='k', + alter='l', having='m', where=day2) + + def test_simple(self): + day1 = datetime.date(2005, 1, 1) + t = Thing.objects.create(when='a', join='b', like='c', drop='d', + alter='e', having='f', where=day1, has_hyphen='h') + self.assertEqual(t.when, 'a') + + day2 = datetime.date(2006, 2, 2) + u = Thing.objects.create(when='h', join='i', like='j', drop='k', + alter='l', having='m', where=day2) + self.assertEqual(u.when, 'h') + + def test_order_by(self): + self.generate() + things = [t.when for t in Thing.objects.order_by('when')] + self.assertEqual(things, ['a', 'h']) + + def test_fields(self): + self.generate() + v = Thing.objects.get(pk='a') + self.assertEqual(v.join, 'b') + self.assertEqual(v.where, datetime.date(year=2005, month=1, day=1)) + + def test_dates(self): + self.generate() + resp = Thing.objects.dates('where', 'year') + self.assertEqual(list(resp), [ + datetime.datetime(2005, 1, 1, 0, 0), + datetime.datetime(2006, 1, 1, 0, 0), + ]) + + def test_month_filter(self): + self.generate() + self.assertEqual(Thing.objects.filter(where__month=1)[0].when, 'a') |