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 Tag
als 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.)
django
django-models
Humphrey Bogart
quelle
quelle
Antworten:
Die Admin-Dokumentation enthält einen Abschnitt zum Inlining mit vielen-zu-vielen-Beziehungen. Sie sollten anstelle von sich selbst
Quote.tags.through
als Modell verwenden .TagInline
Tag
quelle
manytomany field
hat, bedeutet das , dass es für jedes einen brauchtInline
und sie unterschiedlich sind?model = Tag.quote_set.related.through