In primo luogo, so come risolvere il problema, sto solo cercando di capire perché si sta verificando. Il messaggio di errore:Modelli di Django: perché il nome si scontra?
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'.
E il codice:
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)
Se ho capito bene, questa linea:
address = models.ForeignKey(Address, unique=True)
causerà un attributo da aggiungere alla classe Address
con la nome profile
. Cosa sta creando il altro nome "profilo" ?
Cosa succede se non ho bisogno di un nome inverso? C'è un modo per disabilitarlo? Gli indirizzi sono usati per una dozzina di cose, quindi la maggior parte delle relazioni inverse sarà comunque vuota.
C'è un modo per copiare i campi dell'indirizzo nel modello piuttosto che avere una tabella separata per gli indirizzi? Senza ereditarietà di Python (questo non ha senso, e se un modello ha 2 indirizzi, non funziona).
Non l'ho visto, grazie! Sintassi strana. – mpen
Questo è sicuramente il modo corretto per disabilitarlo. – Exelian
originato da https://code.djangoproject.com/ticket/5537 –