Django admin ManyToMany inline kesalahan "tidak memiliki ForeignKey to"

92

Saya sedang menyiapkan admin Django ke model berikut:

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)                                 

Dengan kode berikut:

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)

Saat mencoba untuk melihat halaman admin untuk menambahkan Quote, halaman tersebut menunjukkan kesalahan yang mengatakan <class 'quotes.models.Tag'> has no ForeignKey to <class 'quotes.models.Quote'>. Ini tidak terjadi sebelum saya menambahkan sebaris. Apa masalahnya? Bagaimana cara menambahkan dengan benar Tagsebagai sebaris?

(Saya menghabiskan 20 menit mencari jawaban; Saya menemukan pertanyaan serupa tetapi tidak ada jawaban mereka yang berhasil untuk saya.)

Humphrey Bogart
sumber

Jawaban:

154

Dokumentasi admin memiliki bagian yang didedikasikan untuk sejalan dengan hubungan banyak-ke-banyak. Anda harus menggunakan Quote.tags.throughsebagai model TagInline, bukan model Tagitu sendiri.

Cat Plus Plus
sumber
Kalau saya punya modal yang banyak manytomany field, artinya untuk masing-masing modal itu butuh Inlinedan beda-beda?
Sinux
4
@Rmatt Untuk hubungan banyak-ke-banyak yang terbalik model = Tag.quote_set.related.through
Manh Tai
Apakah ada trik untuk membuat model melalui muncul sebagai bidang id mentah daripada mencantumkan baris yang sangat mungkin di DB?
mlissner
dan inilah mengapa saya mulai mencintai Django
Daniel W.