El administrador de Django ManyToMany en línea "no tiene ForeignKey para" error

92

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 Tagcomo en línea?

(Pasé unos buenos 20 minutos buscando una respuesta; encontré preguntas similares pero ninguna de sus respuestas funcionó para mí).

Humphrey Bogart
fuente

Respuestas:

154

La documentación del administrador tiene una sección dedicada a la integración con relaciones de varios a varios. Debe usarlo Quote.tags.throughcomo modelo para TagInline, en lugar de Tagsí mismo.

Gato Plus Plus
fuente
Si tengo un modal que tiene muchos manytomany field, eso significa que para cada uno necesita un Inliney son diferentes?
Sinux
4
@Rmatt Para relaciones invertidas de muchos a muchos model = Tag.quote_set.related.through
Manh Tai
¿Existe algún truco para hacer que el modelo completo aparezca como un campo de identificación sin formato en lugar de enumerar una fila muy posible en la base de datos?
mlissner
y es por eso que empiezo a amar a Django
Daniel W.