Bis auf ein Beispiel in der Dokumentation kann ich keine Dokumentation darüber finden, wie genau Django den Namen auswählt, mit dem man vom übergeordneten Objekt auf das Kindobjekt zugreifen kann. In ihrem Beispiel, sie wie folgt vor:Wie ordnen Django-Eins-zu-Eins-Beziehungen den Namen dem untergeordneten Objekt zu?
class Place(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=80)
def __unicode__(self):
return u"%s the place" % self.name
class Restaurant(models.Model):
place = models.OneToOneField(Place, primary_key=True)
serves_hot_dogs = models.BooleanField()
serves_pizza = models.BooleanField()
def __unicode__(self):
return u"%s the restaurant" % self.place.name
# 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
<Place: Demon Dogs the place>
# A Place can access its restaurant, if available.
>>> p1.restaurant
So in ihrem Beispiel, sie einfach p1.restaurant aufrufen, ohne diesen Namen explizit zu definieren. Django nimmt an, dass der Name mit Kleinbuchstaben beginnt. Was passiert, wenn der Objektname mehr als ein Wort hat, wie zB FancyRestaurant?
Seitennotiz: Ich versuche, das Benutzerobjekt auf diese Weise zu erweitern. Könnte das das Problem sein?