|
1 """ |
|
2 10. One-to-one relationships |
|
3 |
|
4 To define a one-to-one relationship, use ``OneToOneField()``. |
|
5 |
|
6 In this example, a ``Place`` optionally can be a ``Restaurant``. |
|
7 """ |
|
8 |
|
9 from django.db import models, transaction, IntegrityError |
|
10 |
|
11 class Place(models.Model): |
|
12 name = models.CharField(max_length=50) |
|
13 address = models.CharField(max_length=80) |
|
14 |
|
15 def __unicode__(self): |
|
16 return u"%s the place" % self.name |
|
17 |
|
18 class Restaurant(models.Model): |
|
19 place = models.OneToOneField(Place, primary_key=True) |
|
20 serves_hot_dogs = models.BooleanField() |
|
21 serves_pizza = models.BooleanField() |
|
22 |
|
23 def __unicode__(self): |
|
24 return u"%s the restaurant" % self.place.name |
|
25 |
|
26 class Waiter(models.Model): |
|
27 restaurant = models.ForeignKey(Restaurant) |
|
28 name = models.CharField(max_length=50) |
|
29 |
|
30 def __unicode__(self): |
|
31 return u"%s the waiter at %s" % (self.name, self.restaurant) |
|
32 |
|
33 class ManualPrimaryKey(models.Model): |
|
34 primary_key = models.CharField(max_length=10, primary_key=True) |
|
35 name = models.CharField(max_length = 50) |
|
36 |
|
37 class RelatedModel(models.Model): |
|
38 link = models.OneToOneField(ManualPrimaryKey) |
|
39 name = models.CharField(max_length = 50) |
|
40 |
|
41 class MultiModel(models.Model): |
|
42 link1 = models.OneToOneField(Place) |
|
43 link2 = models.OneToOneField(ManualPrimaryKey) |
|
44 name = models.CharField(max_length=50) |
|
45 |
|
46 def __unicode__(self): |
|
47 return u"Multimodel %s" % self.name |