parts/django/tests/modeltests/one_to_one/models.py
changeset 69 c6bca38c1cbf
equal deleted inserted replaced
68:5ff1fc726848 69:c6bca38c1cbf
       
     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