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í).


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.


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.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.