【发布时间】:2010-06-30 14:12:30
【问题描述】:
让我们看看我能不能解释一下,我有这个模型:
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,它们都显示在管理主页上(这就是为什么我没有使用 BooleanField 来标记它们)。两种类型都有相同的字段,除了一个是帐单编号,在Emmitted 中将自动生成。每张账单都包含 1 个带有编号、客户和日期的标题,1 个或多个带有描述、金额、价格等的正文内联条目和 1 个内联页脚,显示不含税、应用税等的总价格。
更新
我已经做了所有事情,但是我有一个问题,在我的新模型中 BillBody 有两个 FK(EmmitedBill 和 ReceivedBill),它们显示在 TabularInline 中。如何隐藏它们?field.exclude() 会出错。
【问题讨论】:
-
因此,假设您是一家公司,发出的账单是您发送给您的一位客户的账单(并且客户必须支付账单),而收到的账单是您收到的账单您的供应商之一(您必须支付账单)? In 将使用您可能应该使用的数据模型在下面编辑我的答案。也许你可以通过使用 limit_choices_to 来解决 BillBody 中两个 FK 的问题,请参阅 docs.djangoproject.com/en/1.2/ref/models/fields/#foreignkey
标签: django django-admin abstract-class tabular