1. ホーム
  2. django

[解決済み] Django admin ManyToMany inline "has no ForeignKey to" エラー

2022-10-04 22:09:31

質問

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分ほど費やしました。同じような質問を見つけましたが、その答えはどれも私のために働きませんでした)。

どのように解決するのですか?

管理者用ドキュメント には、多対多のリレーションシップでのインライン化に特化したセクションがあります。このセクションでは Quote.tags.through のモデルとして TagInline の代わりに Tag そのものになります。