私が自分自身を説明できるかどうか見てみましょう.私はこのモデルを持っています:
class BillHeader(models.Model):
number = models.CharField(_('Bill number'), max_length=10, unique=True, \
default=__number)
client = models.ForeignKey(ClienteYProveedor, verbose_name=_('Client'))
date = models.DateTimeField(_('Date'), default=datetime.now)
def __unicode__(self):
return str(self.number)
class Meta:
abstract = True
class BillFooter(models.Model):
base_import = models.DecimalField(_('Base import'), max_digits=12, \
decimal_places=2)
class Meta:
abstract = True
class BillBody(models.Model):
description = models.CharField(_('Description'), max_length=200)
amount = models.DecimalField(_('Amount'), max_digits=6, decimal_places=2)
discount = models.DecimalField(_('Discount'), max_digits=4, \
decimal_places=2)
price = models.DecimalField(_('Price'), max_digits=12, decimal_places=2)
unitaryprice = models.DecimalField(_('Unitary Price'), max_digits=12, \
decimal_places=2)
def __unicode__(self):
return self.description
class Meta:
abstract = True
class EmittedBill(BillHeader, BillBody, BillFooter):
pass
class ReceivedBill(BillHeader, BillBody, BillFooter):
pass
ユーザーが Emmited または Received 請求書を追加するBillHeaderと、通常のフィールドセットとして表示する必要がBillBodyありますが、 .BillFooterTabularInline
それらを admin.py に TabularInline として配置するForeignKeyと、関連するモデルに が必要であるというエラーが発生します。もちろん、これらの外部キーは下部に宣言されているため、配置できません。皆さんはこれを「後方外部キー」と呼んでいると思います。
私の質問はこれです: 管理者に TabularInlines を混乱させることなく表示するにはどうすればよいですか?. 私は抽象基本クラスなしでそれを行うことができますが、別の問題が発生します.TabularInlineに他のForeignKeyが表示されます(EmitedBillsを使用している場合は、TabularInlineでReceivedBillsへのFKが表示され、その逆も同様です)、除外できませんでした彼ら。
ばかげた質問で申し訳ありませんが、私はプログラマーではなく (単なる趣味です)、データ モデルをめちゃくちゃにしています。
私はよりよく説明します:
私は 2 種類の請求書を持ってEmittedおりReceived、どちらも管理者ホームに表示されます (そのため、BooleanFieldマークを付けるために a を使用しませんでした)。両方のタイプには、自動生成される請求書番号を除いて同じフィールドEmmittedがあります。各請求書は、番号、クライアント、日付を含む 1 つのヘッダー、説明、金額、価格などを含む 1 つ以上の本文インライン エントリ、および税抜きの合計金額、適用税などを示す 1 つのインライン フッターで構成されます。
アップデート
すべてを実行しましたが、問題があります。新しいモデルの BillBody には 2 つの FK (EmitedBill と ReceivedBill) があり、TabularInline に表示されます。どうすれば非表示にできますか?field.exclude() でエラーが発生します。