Aparte de un ejemplo en los documentos, no encuentro ninguna documentación sobre cómo exactamente elige django el nombre con el que se puede acceder al objeto hijo desde el objeto principal. En su ejemplo, que hacen lo siguiente:¿Cómo se relacionan las relaciones de uno a uno de django con el nombre del objeto secundario?
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
Así que en su ejemplo, que simplemente llaman p1.restaurant sin definir explícitamente ese nombre. Django supone que el nombre comienza con minúsculas. ¿Qué sucede si el nombre del objeto tiene más de una palabra, como FancyRestaurant?
Nota al margen: Estoy tratando de extender el objeto Usuario de esta manera. ¿Podría ser ese el problema?