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


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.


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.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.