118 votes

Django admin ManyToMany inline "n'a pas de ForeignKey" erreur

Je suis dans l'admin de Django pour 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 admin pour ajouter un Quote, la page affiche un message d'erreur indiquant <class 'quotes.models.Tag'> has no ForeignKey to <class 'quotes.models.Quote'>. Ce n'était pas arrivé avant, j'ai ajouté une ligne. Quel est le problème? Comment puis-je ajouter correctement un Tag en ligne?

(J'ai passé un bon 20 minutes à la recherche d'une réponse; j'ai trouvé des questions similaires, mais aucun de leurs réponses a fonctionné pour moi.)

198voto

Cat Plus Plus Points 53385

Admin de la documentation a également une section dédiée aux inline avec plusieurs-à-plusieurs liens. Vous devez utiliser Quote.tags.through comme un modèle pour d' TagInline, au lieu de Tag lui-même.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X