2011-10-25 9 views
2

管理者でインライン要素を使いたいです。私はカテゴリーに関連する項目を と表示したい。Djangoインライン要素は多対多の関係にエラーを与えます

しかし、私はこのエラーを取得する:

Exception at /admin/store/category/7/ 
<class 'store.models.Item'> has no ForeignKey to 
<class 'store.models.Category'> 

私はそれを持っている アイテムを指すようにカテゴリーを使用することを選択したので、それは、のコース、本当です。 しかし、カテゴリにある のすべての項目をインラインでリストに表示するにはどうすればよいですか? このエラーを回避するにはどうすればよいですか?

CONTEXT:

class Category: 
    items=models.ManyToManyField(Item,through='Categoryhasitem')' 

class Categoryhasitem(models.Model): 
    category = models.ForeignKey(Category, db_column='category') 
    item = models.ForeignKey(Item, db_column='item') 

class Item(models.Model): 
    id = models.AutoField(primary_key=True) 

これは私のadmin.pyファイルです。

+0

レガシーデータベースを使用している場合を除いて、多対多リレーションシップのための中間「Categoryhasitem」モデルを定義する必要はありません。 – Alasdair

答えて

1
class ItemInline(admin.TabularInline): 
    model=Item 
class CategoryAdmin(admin.ModelAdmin): 
    inlines=[ItemInline,] 
class ItemAdmin(admin.ModelAdmin): 
    pass 
admin.site.register(Category, CategoryAdmin) 
admin.site.register(Item, ItemAdmin) 

構文は、インラインを使用して多対多の関係を表示するためにわずかに異なっています。

class ItemInline(admin.TabularInline): 
    model = Category.items.through 

class CategoryAdmin(admin.ModelAdmin): 
    inlines = [ 
     ItemInline, 
    ] 
    exclude = ('items',) 

詳細については、working with many-to-many modelsのdjango管理者用ドキュメントを参照してください。

+0

ありがとうございます。それは完璧に働いた。 –