Django管理者ManyToManyインライン「ForeignKeytoがありません」エラー


93

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分を費やしました。同様の質問を見つけましたが、それらの答えはどれも私には役に立ちませんでした。)


回答:


158

管理ドキュメントには、多対多の関係をインライン化するための専用のセクションがあります。それ自体Quote.tags.throughTagInlineはなく、のモデルとして使用する必要がありTagます。


私が多くのモーダルを持っているmanytomany field場合、それはそれぞれに必要でありInline、それらが異なることを意味しますか?
Sinux 2015

4
@Rmatt多対多の関係が逆転した場合 model = Tag.quote_set.related.through
Manh Tai 2016

DBに非常に可能性のある行をリストする代わりに、スルーモデルを生のIDフィールドとして表示するためのトリックはありますか?
mlissner 2017

これが私がDjangoを愛し始める理由です
Daniel W.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.