Forward dichiarazione - nessuna pagina admin in Django?
-
19-09-2019 - |
Domanda
Questo è probabilmente un problema di progettazione db, ma non riuscivo a capire meglio. Tra molti altri, ho questi modelli:
class User(models.Model):
name = models.CharField( max_length=40 )
# some fields omitted
bands = models.ManyToManyField( Band )
e
class Band(models.Model):
creator = models.ForeignKey( User )
# some fields omitted
name = models.CharField( max_length=40 )
Quindi, in pratica, ho un'entità utente, che ha molti a molti relazione con un'entità band. La torsione è che io voglio un utente speciale, che ha "creato" la band sul sito per avere capacità di editing speciali. Così sono andato avanti, e aggiunto un ForeignKey chiamato creatore. Il codice non poteva correre, perché Banda è arrivata dopo l'utente nella fonte. Così ho dichiarato in avanti class Band(models.Model): pass
. Purtroppo, questo non sembra essere exatly una buona idea, perché ora Band è l'unico modello che non mostra eventuali elementi di interfaccia in Admin Django (Bande modello è lì, semplicemente non può essere modificato).
La mia domanda è che cosa il cambiamento dovrei fare nei modelli per ottenere questo lavoro correttamente? (Se presente)
Soluzione
See: http://docs.djangoproject.com/en / dev / ref / modelli / campi / # ForeignKey , che dice:
Se è necessario creare una relazione su un modello che non ha ancora stati definiti, è possibile utilizzare il nome del modello, piuttosto rispetto al modello oggetto stesso:
class Car(models.Model):
manufacturer = models.ForeignKey('Manufacturer')
# ...
class Manufacturer(models.Model):
# ...