3

Ceci est probablement un problème de conception db, mais je ne pouvais pas trouver mieux. Parmi plusieurs autres, j'ai ces modèles:Déclaration de transfert - pas de page d'administration dans django?

class User(models.Model): 
    name = models.CharField(max_length=40) 
    # some fields omitted 
    bands = models.ManyToManyField(Band) 

et

class Band(models.Model): 
    creator = models.ForeignKey(User) 
    # some fields omitted 
    name = models.CharField(max_length=40) 

Donc, fondamentalement, j'ai une entité utilisatrice, qui a plusieurs à plusieurs avec une entité de bande. La torsion est que je veux un utilisateur spécial, qui "a créé" le groupe sur le site pour avoir des capacités d'édition spéciales. Alors je suis allé de l'avant, et j'ai ajouté un créateur appelé ForeignKey. Le code n'a pas pu s'exécuter car Band est arrivé après l'utilisateur dans la source. Donc, je transmets déclaré class Band(models.Model): pass. Malheureusement, cela ne semble pas être une bonne idée, car Band est le seul modèle qui n'affiche aucun élément d'interface dans l'admin django (le modèle Bands est là, il ne peut pas être édité).

Ma question est que quel changement dois-je faire dans les modèles pour que cela fonctionne correctement? (Le cas échéant)

Répondre

12

Voir: http://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey, qui dit:

Si vous avez besoin de créer une relation sur un modèle qui n'a pas encore été défini, vous pouvez utiliser le nom du modèle, plutôt que le modèle lui-même l'objet:

class Car(models.Model): 
     manufacturer = models.ForeignKey('Manufacturer') 
     # ... 

class Manufacturer(models.Model): 
     # ... 
+0

impressionnant, merci. Django FTW! –