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.