~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): Chris Lamb
  • Date: 2009-07-29 11:26:28 UTC
  • mfrom: (1.1.8 upstream) (4.1.5 sid)
  • Revision ID: james.westby@ubuntu.com-20090729112628-pg09ino8sz0sj21t
Tags: 1.1-1
* New upstream release.
* Merge from experimental:
  - Ship FastCGI initscript and /etc/default file in python-django's examples
    directory (Closes: #538863)
  - Drop "05_10539-sphinx06-compatibility.diff"; it has been applied
    upstream.
  - Bump Standards-Version to 3.8.2.

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
"""}