diff -r 2e0b0af889be -r a04b1e4126c4 thirdparty/google_appengine/lib/django/tests/modeltests/one_to_one/models.py --- a/thirdparty/google_appengine/lib/django/tests/modeltests/one_to_one/models.py Sun Sep 06 23:31:53 2009 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,168 +0,0 @@ -""" -10. One-to-one relationships - -To define a one-to-one relationship, use ``OneToOneField()``. - -In this example, a ``Place`` optionally can be a ``Restaurant``. -""" - -from django.db import models - -class Place(models.Model): - name = models.CharField(maxlength=50) - address = models.CharField(maxlength=80) - - def __str__(self): - return "%s the place" % self.name - -class Restaurant(models.Model): - place = models.OneToOneField(Place) - serves_hot_dogs = models.BooleanField() - serves_pizza = models.BooleanField() - - def __str__(self): - return "%s the restaurant" % self.place.name - -class Waiter(models.Model): - restaurant = models.ForeignKey(Restaurant) - name = models.CharField(maxlength=50) - - def __str__(self): - return "%s the waiter at %s" % (self.name, self.restaurant) - -class ManualPrimaryKey(models.Model): - primary_key = models.CharField(maxlength=10, primary_key=True) - name = models.CharField(maxlength = 50) - -class RelatedModel(models.Model): - link = models.OneToOneField(ManualPrimaryKey) - name = models.CharField(maxlength = 50) - -__test__ = {'API_TESTS':""" -# Create a couple of Places. ->>> p1 = Place(name='Demon Dogs', address='944 W. Fullerton') ->>> p1.save() ->>> p2 = Place(name='Ace Hardware', address='1013 N. Ashland') ->>> p2.save() - -# Create a Restaurant. Pass the ID of the "parent" object as this object's ID. ->>> r = Restaurant(place=p1, serves_hot_dogs=True, serves_pizza=False) ->>> r.save() - -# A Restaurant can access its place. ->>> r.place - - -# A Place can access its restaurant, if available. ->>> p1.restaurant - - -# p2 doesn't have an associated restaurant. ->>> p2.restaurant -Traceback (most recent call last): - ... -DoesNotExist: Restaurant matching query does not exist. - -# Set the place using assignment notation. Because place is the primary key on Restaurant, -# the save will create a new restaurant ->>> r.place = p2 ->>> r.save() ->>> p2.restaurant - ->>> r.place - - -# Set the place back again, using assignment in the reverse direction -# Need to reget restaurant object first, because the reverse set -# can't update the existing restaurant instance ->>> p1.restaurant = r ->>> r.save() ->>> p1.restaurant - - ->>> r = Restaurant.objects.get(pk=1) ->>> r.place - - -# Restaurant.objects.all() just returns the Restaurants, not the Places. -# Note that there are two restaurants - Ace Hardware the Restaurant was created -# in the call to r.place = p2. This means there are multiple restaurants referencing -# a single place... ->>> Restaurant.objects.all() -[, ] - -# Place.objects.all() returns all Places, regardless of whether they have -# Restaurants. ->>> Place.objects.order_by('name') -[, ] - ->>> Restaurant.objects.get(place__id__exact=1) - ->>> Restaurant.objects.get(pk=1) - ->>> Restaurant.objects.get(place__exact=1) - ->>> Restaurant.objects.get(place__exact=p1) - ->>> Restaurant.objects.get(place=1) - ->>> Restaurant.objects.get(place=p1) - ->>> Restaurant.objects.get(place__pk=1) - ->>> Restaurant.objects.get(place__name__startswith="Demon") - - ->>> Place.objects.get(id__exact=1) - ->>> Place.objects.get(pk=1) - ->>> Place.objects.get(restaurant__place__exact=1) - ->>> Place.objects.get(restaurant__place__exact=p1) - ->>> Place.objects.get(restaurant__pk=1) - ->>> Place.objects.get(restaurant=1) - ->>> Place.objects.get(restaurant=r) - ->>> Place.objects.get(restaurant__exact=1) - ->>> Place.objects.get(restaurant__exact=r) - - -# Add a Waiter to the Restaurant. ->>> w = r.waiter_set.create(name='Joe') ->>> w.save() ->>> w - - -# Query the waiters ->>> Waiter.objects.filter(restaurant__place__pk=1) -[] ->>> Waiter.objects.filter(restaurant__place__exact=1) -[] ->>> Waiter.objects.filter(restaurant__place__exact=p1) -[] ->>> Waiter.objects.filter(restaurant__pk=1) -[] ->>> Waiter.objects.filter(id__exact=1) -[] ->>> Waiter.objects.filter(pk=1) -[] ->>> Waiter.objects.filter(restaurant=1) -[] ->>> Waiter.objects.filter(restaurant=r) -[] - -# Delete the restaurant; the waiter should also be removed ->>> r = Restaurant.objects.get(pk=1) ->>> r.delete() - -# One-to-one fields still work if you create your own primary key ->>> o1 = ManualPrimaryKey(primary_key="abc123", name="primary") ->>> o1.save() ->>> o2 = RelatedModel(link=o1, name="secondary") ->>> o2.save() -"""}