Django: funzioni di accesso inverse per il conflitto di chiavi esterne


113

Ho due modelli Django che ereditano da una classe base:

- Request
    - Inquiry
    - Analysis

La richiesta ha due chiavi esterne per il modello utente predefinito.

create_user = models.ForeignKey(User, related_name='requests_created')
assign_user = models.ForeignKey(User, related_name='requests_assigned')

Per qualche motivo ricevo l'errore

Reverse accessor for 'Analysis.assign_user' clashes with reverse accessor for 'Inquiry.assign_user'.

Tutto quello che ho letto dice che l'impostazione di related_namedovrebbe impedire lo scontro, ma continuo a ricevere lo stesso errore. Qualcuno può pensare al motivo per cui questo sarebbe accaduto? Grazie!


1
Potete per favore pubblicare le definizioni del modello, inclusi Inquirye Analysise la loro relazione conRequest
dm03514

collegamento aggiornato per il nome correlato in Django 1.9
Seb

Risposte:


138

Il related_namegarantirebbe che i campi non sono stati in conflitto tra di loro, ma avete due modelli, ognuno dei quali ha sia di quei campi. Devi inserire il nome del modello concreto in ognuno, cosa che puoi fare con alcune speciali sostituzioni di stringhe :

 create_user = models.ForeignKey(User, related_name='%(class)s_requests_created')

1
Il collegamento nella tua risposta è morto.
Matt D

2
@MatthewDrill ho inviato una modifica per correggerla, nel frattempo prova docs.djangoproject.com/en/1.10/topics/db/models/…
Ivan

Bella risposta! Grazie!
Tms91
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.