让我们看看我是否可以解释自己,我有这个模型:
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
需要BillFooter
是TabularInline
.
如果我将它们作为 TabularInline 放在 admin.py 中,则会出现一个错误,指出它们需要ForeignKey
相关模型。当然,我不能放那些外键,因为它们是在底部声明的。我认为你们称之为“向后外键”。
我的问题是:我怎样才能在管理员中显示 TabularInlines 而不会弄得一团糟?我可以在没有抽象基类的情况下做到这一点,但是另一个问题来了,它在 TabularInline 中显示了另一个 ForeignKey(如果你在 EmmitedBills 上,它会在 TabularInline 中显示 FK 到 ReceivedBills,反之亦然),我无法排除他们。
对不起,如果这是一个愚蠢的问题,但我不是程序员(这只是一种爱好),我真的让自己对数据模型一团糟。
我会更好地解释:
我有两种类型的账单,Emitted
并且Received
它们都显示在管理主页上(这就是为什么我没有使用 aBooleanField
来标记它们)。两种类型都有相同的字段,除了一个是帐单编号,Emmitted
它将自动生成。每个账单包含 1 个带有编号、客户和日期的标题,1 个或多个带有描述、金额、价格等的正文内联条目和 1 个内联页脚,显示不含税的总价格、应用的税等。
更新
我已经做了所有事情,但是我有一个问题,在我的新模型中 BillBody 有两个 FK(EmmitedBill 和 ReceivedBill),它们显示在 TabularInline 中。如何隐藏它们?field.exclude() 给出错误。