Konfiguruję administratora Django na następujące modele:
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)
Z następującym kodem:
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)
Podczas próby wyświetlenia strony administratora w celu dodania a Quote
, strona wyświetla komunikat o błędzie <class 'quotes.models.Tag'> has no ForeignKey to <class 'quotes.models.Quote'>
. Nie wydarzyło się to, zanim dodałem inline. Jaki jest problem? Jak poprawnie dodać Tag
jako inline?
(Spędziłem dobre 20 minut na poszukiwaniu odpowiedzi; znalazłem podobne pytania, ale żadna z ich odpowiedzi nie zadziałała.)
django
django-models
Humphrey Bogart
źródło
źródło
Odpowiedzi:
Dokumentacja administratora zawiera sekcję poświęconą dołączaniu relacji wiele-do-wielu. Powinieneś używać go
Quote.tags.through
jako modeluTagInline
zamiastTag
siebie.źródło
manytomany field
, to znaczy, że dla każdego potrzebuje aInline
i są różne?model = Tag.quote_set.related.through