Estou configurando o administrador Django para os seguintes modelos:
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)
Com o seguinte código:
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)
Ao tentar visualizar a página de administração para adicionar um Quote
, a página mostra um erro dizendo <class 'quotes.models.Tag'> has no ForeignKey to <class 'quotes.models.Quote'>
. Isso não aconteceu antes de eu adicionar um embutido. Qual é o problema? Como adiciono corretamente a Tag
como embutido?
(Passei uns bons 20 minutos procurando uma resposta; encontrei perguntas semelhantes, mas nenhuma das respostas funcionou para mim.)
django
django-models
Humphrey Bogart
fonte
fonte
Respostas:
A documentação do administrador tem uma seção dedicada a inlining com relacionamentos muitos para muitos. Você deve usar
Quote.tags.through
como modelo paraTagInline
, em vez deTag
si mesmo.fonte
manytomany field
, isso significa que para cada um ele precisa de umInline
e eles são diferentes?model = Tag.quote_set.related.through