Django-Administrator ManyToMany Inline-Fehler "hat keinen ForeignKey to"

88

Ich richte den Django-Administrator für die folgenden Modelle ein:

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)                                 

Mit folgendem Code:

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)

Beim Versuch, die Administrationsseite anzuzeigen, um eine hinzuzufügen Quote, wird auf der Seite ein Fehler angezeigt <class 'quotes.models.Tag'> has no ForeignKey to <class 'quotes.models.Quote'>. Dies geschah nicht, bevor ich eine Inline hinzufügte. Was ist das Problem? Wie füge ich ein korrekt Tagals Inline hinzu?

(Ich habe gut 20 Minuten damit verbracht, nach einer Antwort zu suchen. Ich habe ähnliche Fragen gefunden, aber keine ihrer Antworten hat bei mir funktioniert.)

Humphrey Bogart
quelle

Antworten:

147

Die Admin-Dokumentation enthält einen Abschnitt zum Inlining mit vielen-zu-vielen-Beziehungen. Sie sollten anstelle von sich selbst Quote.tags.throughals Modell verwenden .TagInlineTag

Cat Plus Plus
quelle
Wenn ich ein Modal habe, das viele manytomany fieldhat, bedeutet das , dass es für jedes einen braucht Inlineund sie unterschiedlich sind?
Sinux
4
@Rmatt Für umgekehrte Viele-zu-Viele-Beziehungen model = Tag.quote_set.related.through
Manh Tai
Gibt es einen Trick, um das Durchgangsmodell als unformatiertes ID-Feld anzuzeigen, anstatt eine sehr mögliche Zeile in der Datenbank aufzulisten?
mlissner
und deshalb fange ich an, Django zu lieben
Daniel W.