Estoy configurando el administrador de Django para los siguientes 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)
Con el siguiente 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)
Al intentar ver la página de administración para agregar un Quote
, la página muestra un mensaje de error <class 'quotes.models.Tag'> has no ForeignKey to <class 'quotes.models.Quote'>
. Esto no sucedió antes de que agregara un archivo en línea. ¿Cuál es el problema? ¿Cómo agrego correctamente un Tag
como en línea?
(Pasé unos buenos 20 minutos buscando una respuesta; encontré preguntas similares pero ninguna de sus respuestas funcionó para mí).
django
django-models
Humphrey Bogart
fuente
fuente
Respuestas:
La documentación del administrador tiene una sección dedicada a la integración con relaciones de varios a varios. Debe usarlo
Quote.tags.through
como modelo paraTagInline
, en lugar deTag
sí mismo.fuente
manytomany field
, eso significa que para cada uno necesita unInline
y son diferentes?model = Tag.quote_set.related.through