ผู้ดูแลระบบ Django ข้อผิดพลาด ManyToMany อินไลน์“ ไม่มี ForeignKey ถึง”


92

ฉันกำลังตั้งค่าผู้ดูแลระบบ Django เป็นรุ่นต่อไปนี้:

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)                                 

ด้วยรหัสต่อไปนี้:

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)

เมื่อพยายามที่จะดูหน้าผู้ดูแลระบบเพื่อเพิ่มการแสดงหน้าข้อผิดพลาดว่าQuote <class 'quotes.models.Tag'> has no ForeignKey to <class 'quotes.models.Quote'>สิ่งนี้ไม่เกิดขึ้นก่อนที่ฉันจะเพิ่มอินไลน์ มีปัญหาอะไร? ฉันจะเพิ่มTagเป็นอินไลน์ได้อย่างไร?

(ฉันใช้เวลาหาคำตอบประมาณ 20 นาทีฉันพบคำถามที่คล้ายกัน แต่ไม่มีคำตอบใดที่เหมาะกับฉัน)


คำตอบ:


155

เอกสารสำหรับผู้ดูแลระบบมีส่วนเฉพาะสำหรับการแทรกความสัมพันธ์แบบกลุ่มต่อกลุ่ม คุณควรใช้Quote.tags.throughเป็นต้นแบบTagInlineแทนTagตัวเอง


ถ้าฉันมีโมดอลที่มีจำนวนมากmanytomany fieldนั่นหมายความว่าสำหรับแต่ละโมดอลนั้นต้องการ a Inlineและต่างกันอย่างไร
Sinux

4
@Rmatt สำหรับความสัมพันธ์แบบหลายต่อหลายคน model = Tag.quote_set.related.through
Manh Tai

มีเคล็ดลับในการทำให้โมเดลผ่านปรากฏเป็นฟิลด์รหัสดิบแทนที่จะแสดงรายการแถวที่เป็นไปได้ใน DB หรือไม่
mlissner

และนี่คือสาเหตุที่ฉันเริ่มรัก Django
Daniel W.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.