5

次のモデルが与えられます:

class Store(models.Model):
    name = models.CharField(max_length=150)

class ItemGroup(models.Model):
    group = models.CharField(max_length=100)
    code = models.CharField(max_length=20)

class ItemType(models.Model):
    store = models.ForeignKey(Store, on_delete=models.CASCADE, related_name="item_types")
    item_group = models.ForeignKey(ItemGroup)
    type = models.CharField(max_length=100)

インラインのハンドルは、単一のを表示するときに複数item_typesStoreうまく追加しStoreます。

コンテンツ管理チームは、ストアとそのタイプを一括で編集できるようにしたいと考えています。のように、新しいレコードを追加することもできる簡単な実装方法はありStore.item_typesますか?そうでない場合は、カスタムテンプレートを実装する方法を示す簡単なガイドはありますか?私はグーグルをしてきましたが、何も思い付くことができませんでした。list_editablehorizontal_filterlist_editable

また、これらのモデルをセットアップするためのより簡単またはより良い方法があり、これを実装しやすくする場合は、コメントしてください。

4

1 に答える 1

1

ItemType を Store の ManyToManyField にするのはどうですか?

Store で利用可能な ItemTypes を変更する場合、(ItemType ではなく) Store のプロパティを変更することは論理的に思えます。

例えば:

from django.db import models

class ItemGroup(models.Model):
    group = models.CharField(max_length=100)
    code = models.CharField(max_length=20)

class ItemType(models.Model):
    item_group = models.ForeignKey(ItemGroup)
    type = models.CharField(max_length=100)

class Store(models.Model):
    name = models.CharField(max_length=150)
    item_type = models.ManyToManyField(ItemType, related_name="store")

# admin
from django.contrib import admin

class StoreAdmin(admin.ModelAdmin):
    list_display=('name', 'item_type',)
    list_editable=('item_type',)

for model in [(Store, StoreAdmin), (ItemGroup,), (ItemType,)]:
    admin.site.register(*model)

ここでエラーが発生します:

File "C:\Python27\lib\site-packages\django\contrib\admin\validation.py", line 43, in validate
% (cls.__name__, idx, field))
django.core.exceptions.ImproperlyConfigured: 'StoreAdmin.list_display[1]', 'item_type' is a ManyToManyField which is not supported.

django.contrib.admin.validation の 41 ~ 43 行目をコメントアウトして解決しました。

#if isinstance(f, models.ManyToManyField):
#    raise ImproperlyConfigured("'%s.list_display[%d]', '%s' is a ManyToManyField which is not supported."
#        % (cls.__name__, idx, field))

おそらく理想的な解決策ではありませんが、私にはうまくいったようです。

于 2012-09-07T10:19:36.583 に答える