~ubuntu-branches/ubuntu/quantal/python-django/quantal

« back to all changes in this revision

Viewing changes to tests/modeltests/custom_columns/models.py

  • Committer: Bazaar Package Importer
  • Author(s): Scott James Remnant
  • Date: 2008-11-15 19:15:33 UTC
  • mfrom: (1.1.6 upstream)
  • Revision ID: james.westby@ubuntu.com-20081115191533-xbt1ut2xf4fvwtvc
Tags: 1.0.1-0ubuntu1
* New upstream release:
  - Bug fixes.

* The tests/ sub-directory appaers to have been dropped upstream, so pull
  our patch to workaround the tests and modify the rules.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
"""
2
 
17. Custom column/table names
3
 
 
4
 
If your database column name is different than your model attribute, use the
5
 
``db_column`` parameter. Note that you'll use the field's name, not its column
6
 
name, in API usage.
7
 
 
8
 
If your database table name is different than your model name, use the
9
 
``db_table`` Meta attribute. This has no effect on the API used to
10
 
query the database.
11
 
 
12
 
If you need to use a table name for a many-to-many relationship that differs
13
 
from the default generated name, use the ``db_table`` parameter on the
14
 
``ManyToManyField``. This has no effect on the API for querying the database.
15
 
 
16
 
"""
17
 
 
18
 
from django.db import models
19
 
 
20
 
class Author(models.Model):
21
 
    first_name = models.CharField(max_length=30, db_column='firstname')
22
 
    last_name = models.CharField(max_length=30, db_column='last')
23
 
 
24
 
    def __unicode__(self):
25
 
        return u'%s %s' % (self.first_name, self.last_name)
26
 
 
27
 
    class Meta:
28
 
        db_table = 'my_author_table'
29
 
        ordering = ('last_name','first_name')
30
 
 
31
 
class Article(models.Model):
32
 
    headline = models.CharField(max_length=100)
33
 
    authors = models.ManyToManyField(Author, db_table='my_m2m_table')
34
 
 
35
 
    def __unicode__(self):
36
 
        return self.headline
37
 
 
38
 
    class Meta:
39
 
        ordering = ('headline',)
40
 
 
41
 
__test__ = {'API_TESTS':"""
42
 
# Create a Author.
43
 
>>> a = Author(first_name='John', last_name='Smith')
44
 
>>> a.save()
45
 
 
46
 
>>> a.id
47
 
1
48
 
 
49
 
# Create another author
50
 
>>> a2 = Author(first_name='Peter', last_name='Jones')
51
 
>>> a2.save()
52
 
 
53
 
# Create an article
54
 
>>> art = Article(headline='Django lets you build web apps easily')
55
 
>>> art.save()
56
 
>>> art.authors = [a, a2]
57
 
 
58
 
# Although the table and column names on Author have been set to custom values,
59
 
# nothing about using the Author model has changed...
60
 
 
61
 
# Query the available authors
62
 
>>> Author.objects.all()
63
 
[<Author: Peter Jones>, <Author: John Smith>]
64
 
 
65
 
>>> Author.objects.filter(first_name__exact='John')
66
 
[<Author: John Smith>]
67
 
 
68
 
>>> Author.objects.get(first_name__exact='John')
69
 
<Author: John Smith>
70
 
 
71
 
>>> Author.objects.filter(firstname__exact='John')
72
 
Traceback (most recent call last):
73
 
    ...
74
 
FieldError: Cannot resolve keyword 'firstname' into field. Choices are: article, first_name, id, last_name
75
 
 
76
 
>>> a = Author.objects.get(last_name__exact='Smith')
77
 
>>> a.first_name
78
 
u'John'
79
 
>>> a.last_name
80
 
u'Smith'
81
 
>>> a.firstname
82
 
Traceback (most recent call last):
83
 
    ...
84
 
AttributeError: 'Author' object has no attribute 'firstname'
85
 
>>> a.last
86
 
Traceback (most recent call last):
87
 
    ...
88
 
AttributeError: 'Author' object has no attribute 'last'
89
 
 
90
 
# Although the Article table uses a custom m2m table,
91
 
# nothing about using the m2m relationship has changed...
92
 
 
93
 
# Get all the authors for an article
94
 
>>> art.authors.all()
95
 
[<Author: Peter Jones>, <Author: John Smith>]
96
 
 
97
 
# Get the articles for an author
98
 
>>> a.article_set.all()
99
 
[<Article: Django lets you build web apps easily>]
100
 
 
101
 
# Query the authors across the m2m relation
102
 
>>> art.authors.filter(last_name='Jones')
103
 
[<Author: Peter Jones>]
104
 
 
105
 
"""}