Django quản trị ManyToMany nội tuyến "không có ForeignKey để" lỗi


91

Tôi đang thiết lập quản trị viên Django cho các mô hình sau:

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)                                 

Với mã sau:

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)

Khi cố gắng xem trang quản trị để thêm a Quote, trang này hiển thị lỗi thông báo <class 'quotes.models.Tag'> has no ForeignKey to <class 'quotes.models.Quote'>. Điều này không xảy ra trước khi tôi thêm nội tuyến. Vấn đề là gì? Làm cách nào để thêm một cách chính xác Tagdưới dạng nội dòng?

(Tôi đã dành 20 phút để tìm kiếm câu trả lời; tôi đã tìm thấy những câu hỏi tương tự nhưng không câu trả lời nào phù hợp với tôi.)


Câu trả lời:


152

Tài liệu dành cho quản trị viên có một phần dành riêng cho nội tuyến với các mối quan hệ nhiều-nhiều. Bạn nên sử dụng Quote.tags.throughlàm mô hình TagInlinethay vì Tagchính nó.


Nếu tôi có một phương thức có nhiều manytomany field, nghĩa là đối với mỗi phương thức , nó cần một Inlinevà chúng khác nhau?
Sinux

4
@Rmatt Đối với quan hệ nhiều thành nhiều đảo ngược model = Tag.quote_set.related.through
Mạnh Tài

Có mẹo nào để làm cho mô hình thông qua xuất hiện dưới dạng một trường id thô thay vì liệt kê hàng rất có thể trong DB không?
mlissner

và đây là lý do tại sao tôi bắt đầu yêu Django
Daniel W.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.