En primer lugar, sé cómo solucionar el problema, solo estoy tratando de entender por qué está ocurriendo. El mensaje de error:Modelos Django: ¿Por qué el nombre choca?
users.profile: Reverse query name for field 'address' clashes with related field 'Address.profile'. Add a related_name a rgument to the definition for 'address'.
Y el código:
class Address(models.Model):
country = fields.CountryField(default='CA')
province = fields.CAProvinceField()
city = models.CharField(max_length=80)
postal_code = models.CharField(max_length=6)
street1 = models.CharField(max_length=80)
street2 = models.CharField(max_length=80, blank=True, null=True)
street3 = models.CharField(max_length=80, blank=True, null=True)
class Profile(Address):
user = models.ForeignKey(User, unique=True, related_name='profile')
primary_phone = models.CharField(max_length=20)
address = models.ForeignKey(Address, unique=True)
Si he entendido bien, esta línea:
address = models.ForeignKey(Address, unique=True)
causará un atributo que se añadirán a la clase Address
con el nombre profile
. ¿Qué está creando el otro nombre de "perfil"?
¿Qué sucede si no necesito un nombre inverso? ¿Hay alguna forma de desactivarlo? Las direcciones se utilizan para una docena de cosas, por lo que la mayoría de las relaciones inversas estarán en blanco de todos modos.
¿Hay alguna forma de copiar los campos de dirección en el modelo en lugar de tener una tabla separada para las direcciones? Sin la herencia de Python (esto no tiene sentido, y si un Modelo tiene 2 direcciones, no funciona).
¡No vi eso, gracias! Sintaxis extraña – mpen
Esta es definitivamente la forma correcta de desactivarlo. – Exelian
se originó a partir de ese https://code.djangoproject.com/ticket/5537 –