私は小さな django プロジェクトを行っていますが、特定のモデルを管理サイトにインラインで配置しようとすると、いくつかの問題が発生します。例えば:
models.py
class Client(models.Model):
client_name = models.CharField(max_length=100,unique=True,blank=False)
phone_number = models.ForeignKey(Phone)
class Phone(models.Model):
info = models.Charfield("eg. Personal", max_length=20)
number = models.CharField(max_length=20, blank=False)
今、クライアント管理者に phone_number をインラインでスタックさせたい場合、それはできません...代わりに、次のようなモデルが必要です。
class Client(models.Model):
client_name = ...
class PhoneAbstract(models.Model):
info = ...
number = ...
class Meta:
abstract = True
class ClientPhone(PhoneAbstract):
client = models.ForeignKey(Client)
...そして基本的に、電話をモデルに関連付けるたびに PhoneAbstract から継承する新しいクラスを定義します:(。これはひどいですが、これを実行して適切な管理インターフェイスを取得できる唯一の方法です:
admin.py
class PhoneInline(admin.TabularInline):
model = ClientPhone
class ClientAdmin(admin.ModelAdmin):
inlines = (PhoneInline, )
さて、これは(まだ教育を受けていない私の目には)地獄のように醜く、関係がぎこちなくなります...最初のケースでClientAdminに外部キーを入れる方法はありますか?おそらくこれが ModelAdmin.list_select_related の目的ですが、よくわかりません... :(