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.