Domanda

Sinossi: Ogni account utente ha un ProfiloUtente per contenere informazioni esteso come numeri di telefono, indirizzi, ecc Poi, un account utente può avere più identità. Ci sono diversi tipi di identità che contengono diversi tipi di informazioni. La struttura sarebbe in questo modo:

User
  |<-FK- UserProfile
  |
  |<-FK- IdentityType1
  |<-FK- IdentityType1
  |<-FK- IdentityType2
  |<-FK- IdentityType3 (current)
  |<-FK- IdentityType3
  |<-FK- IdentityType3

L'account utente può essere collegato a numero n di identità di diversi tipi, ma può utilizzare solo un'identità alla volta.

A quanto pare, il modo in cui Django sarebbe quello di raccogliere tutte le identità collegate (user.IdentityType1_set.select_related ()) in un QuerySet e quindi controllare ciascuno per un qualche tipo di campo 'corrente'.

Domanda: Qualcuno può pensare a un modo migliore per selezionare la 'corrente' marcata identità che fare tre domande DB (uno per ogni IdentityType)?

È stato utile?

Soluzione

Perché non tenere traccia di quale profilo viene utilizzato con la sessione al posto del database. Non ha senso affermare negozio nel database, che è quello che le sessioni sono per.

Altri suggerimenti

Potrebbe essere bello avere l'UserProfile per tenere traccia di cui è attualmente utilizzata identità.

Supponendo che ogni identità è un modello diverso si potrebbe fare una delle due cose per rendere questo accada.

  • Si potrebbe avere una comune classe del modello di padre che ciascuno eredita classe identità da, e si potrebbe aggiungere una chiave esterna sul profilo per la classe di identità genitore.

  • In alternativa, se ereditare non ha senso pratico, è possibile utilizzare rapporti generici .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top