Changeset 8884 for django/trunk/tests/modeltests/custom_pk/models.py
- Timestamp:
- 09/02/08 19:09:33 (3 months ago)
- Files:
-
- django/trunk/tests/modeltests/custom_pk/models.py (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/trunk/tests/modeltests/custom_pk/models.py
r7322 r8884 7 7 """ 8 8 9 from django.db import models 9 from django.conf import settings 10 from django.db import models, transaction, IntegrityError 10 11 11 12 class Employee(models.Model): 12 employee_code = models.CharField(max_length=10, primary_key=True, 13 db_column = 'code') 13 employee_code = models.IntegerField(primary_key=True, db_column = 'code') 14 14 first_name = models.CharField(max_length=20) 15 15 last_name = models.CharField(max_length=20) … … 30 30 31 31 __test__ = {'API_TESTS':""" 32 >>> dan = Employee(employee_code= 'ABC123', first_name='Dan', last_name='Jones')32 >>> dan = Employee(employee_code=123, first_name='Dan', last_name='Jones') 33 33 >>> dan.save() 34 34 >>> Employee.objects.all() 35 35 [<Employee: Dan Jones>] 36 36 37 >>> fran = Employee(employee_code= 'XYZ456', first_name='Fran', last_name='Bones')37 >>> fran = Employee(employee_code=456, first_name='Fran', last_name='Bones') 38 38 >>> fran.save() 39 39 >>> Employee.objects.all() 40 40 [<Employee: Fran Bones>, <Employee: Dan Jones>] 41 41 42 >>> Employee.objects.get(pk= 'ABC123')42 >>> Employee.objects.get(pk=123) 43 43 <Employee: Dan Jones> 44 >>> Employee.objects.get(pk= 'XYZ456')44 >>> Employee.objects.get(pk=456) 45 45 <Employee: Fran Bones> 46 >>> Employee.objects.get(pk= 'foo')46 >>> Employee.objects.get(pk=42) 47 47 Traceback (most recent call last): 48 48 ... … … 50 50 51 51 # Use the name of the primary key, rather than pk. 52 >>> Employee.objects.get(employee_code__exact= 'ABC123')52 >>> Employee.objects.get(employee_code__exact=123) 53 53 <Employee: Dan Jones> 54 54 55 55 # pk can be used as a substitute for the primary key. 56 >>> Employee.objects.filter(pk__in=[ 'ABC123','XYZ456'])56 >>> Employee.objects.filter(pk__in=[123, 456]) 57 57 [<Employee: Fran Bones>, <Employee: Dan Jones>] 58 58 59 59 # The primary key can be accessed via the pk property on the model. 60 >>> e = Employee.objects.get(pk= 'ABC123')60 >>> e = Employee.objects.get(pk=123) 61 61 >>> e.pk 62 u'ABC123' 62 123 63 63 64 64 # Or we can use the real attribute name for the primary key: 65 65 >>> e.employee_code 66 u'ABC123' 66 123 67 67 68 68 # Fran got married and changed her last name. 69 >>> fran = Employee.objects.get(pk= 'XYZ456')69 >>> fran = Employee.objects.get(pk=456) 70 70 >>> fran.last_name = 'Jones' 71 71 >>> fran.save() 72 72 >>> Employee.objects.filter(last_name__exact='Jones') 73 73 [<Employee: Dan Jones>, <Employee: Fran Jones>] 74 >>> emps = Employee.objects.in_bulk([ 'ABC123', 'XYZ456'])75 >>> emps[ 'ABC123']74 >>> emps = Employee.objects.in_bulk([123, 456]) 75 >>> emps[123] 76 76 <Employee: Dan Jones> 77 77 … … 97 97 [<Employee: Dan Jones>, <Employee: Fran Jones>] 98 98 99 >>> Business.objects.filter(employees__employee_code__exact= 'ABC123')99 >>> Business.objects.filter(employees__employee_code__exact=123) 100 100 [<Business: Sears>] 101 >>> Business.objects.filter(employees__pk= 'ABC123')101 >>> Business.objects.filter(employees__pk=123) 102 102 [<Business: Sears>] 103 103 >>> Business.objects.filter(employees__first_name__startswith='Fran') … … 105 105 106 106 # Primary key may be unicode string 107 >>> emp = Employee(employee_code='jaźń') 108 >>> emp.save() 107 >>> bus = Business(name=u'jaźń') 108 >>> bus.save() 109 110 # The primary key must also obviously be unique, so trying to create a new 111 # object with the same primary key will fail. 112 >>> try: 113 ... sid = transaction.savepoint() 114 ... Employee.objects.create(employee_code=123, first_name='Fred', last_name='Jones') 115 ... transaction.savepoint_commit(sid) 116 ... except Exception, e: 117 ... if isinstance(e, IntegrityError): 118 ... transaction.savepoint_rollback(sid) 119 ... print "Pass" 120 ... else: 121 ... print "Fail with %s" % type(e) 122 Pass 109 123 110 124 """} 125 126 # SQLite lets objects be saved with an empty primary key, even though an 127 # integer is expected. So we can't check for an error being raised in that case 128 # for SQLite. Remove it from the suite for this next bit. 129 if settings.DATABASE_ENGINE != 'sqlite3': 130 __test__["API_TESTS"] += """ 131 # The primary key must be specified, so an error is raised if you try to create 132 # an object without it. 133 >>> try: 134 ... sid = transaction.savepoint() 135 ... Employee.objects.create(first_name='Tom', last_name='Smith') 136 ... print 'hello' 137 ... transaction.savepoint_commit(sid) 138 ... print 'hello2' 139 ... except Exception, e: 140 ... if isinstance(e, IntegrityError): 141 ... transaction.savepoint_rollback(sid) 142 ... print "Pass" 143 ... else: 144 ... print "Fail with %s" % type(e) 145 Pass 146 147 """
