L'administrateur Django ManyToMany inline erreur "n'a pas de clé étrangère à"


92

Je configure l'administrateur Django sur les modèles suivants:

class Quote(models.Model):                                                  
    author = models.CharField(max_length=100)                               
    quote = models.CharField(max_length=1000)                               
    tags = models.ManyToManyField('Tag')                                    

class Tag(models.Model):                                                    
    name = models.CharField(max_length=100)                                 

Avec le code suivant:

class TagInline(admin.TabularInline):                                                                                               
    model = Tag                                                             

class QuoteAdmin(admin.ModelAdmin):                                         
    list_display = ('author', 'quote')                                      
    inlines = (TagInline,)                                                  

class TagAdmin(admin.ModelAdmin):                                           
    pass                                                                    

admin.site.register(Quote, QuoteAdmin)                                      
admin.site.register(Tag, TagAdmin)

Lorsque vous essayez d'afficher la page d'administration pour ajouter un Quote, la page affiche une erreur disant <class 'quotes.models.Tag'> has no ForeignKey to <class 'quotes.models.Quote'>. Cela ne s'est pas produit avant que j'aie ajouté un inline. Quel est le problème? Comment puis-je ajouter correctement un Tagen ligne?

(J'ai passé 20 bonnes minutes à chercher une réponse; j'ai trouvé des questions similaires mais aucune de leurs réponses n'a fonctionné pour moi.)


Réponses:


153

La documentation d'administration a une section dédiée à l'intégration avec des relations plusieurs-à-plusieurs. Vous devez utiliser Quote.tags.throughcomme modèle pour TagInline, au lieu de Taglui - même.


Si j'ai un modal qui en a plusieurs manytomany field, cela signifie que pour chacun il en a besoin Inlineet qu'ils sont différents?
Sinux

4
@Rmatt Pour les relations plusieurs-à-plusieurs inversées model = Tag.quote_set.related.through
Manh Tai

Existe-t-il une astuce pour faire apparaître le modèle through comme un champ ID brut au lieu de lister une ligne très possible dans la base de données?
mlissner

et c'est pourquoi je commence à aimer Django
Daniel W.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.