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.)


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


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.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.