我不完全理解你的问题,但你可以用
ForeignKey('ModelName')
而不是
ForeignKey(ModelName)
如果
ModelName
模型尚未声明。也许这能解决你的问题。
内联管理员(如
TabularInline
)仅当您有一对多关系(由
ForeignKey
上
侧面。如果没有这样的外键,那么就不能使用内联管理。继承绝对不同于
.
emitted
和
received
账单。两者
和
收到
账单有相同的字段。此外,您希望每个账单都包含一个带有编号、客户机和日期的标题、一个或多个正文条目,其中每个条目存储您存储的信息
BillBody
和1个或更多的小数
base_number
.
一个可能更好的数据模型
class Bill(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 get_total_price(self):
return sum([entry.price for entry in self.entries])
class BillEntry(models.Model):
bill = models.ForeignKey(Bill, related_name='entries')
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)
我漏掉了那本书
__unicode__
方法。
现在您有了来自的外键
BillEntry
Bill
base_import
所以我把这个忘了。
如果你的
price
应该总是等于
amount*unitaryprice - discount
或
amount*(unitaryprice-discount)
get_total_price
. 如果您想在查询数据库时计算它们,那么让它与Django一起工作就有点困难了。
在最后一个例子中,您可以查看SQL视图,但我认为这对于初学者来说有点太难了。另一种选择是使用自定义SQL表达式:
BillEntry.objects.extra(select={'price': 'amount*unitaryprice-discount'})
这将在选择期间计算所有条目的价格。
如果为发出和收到的账单添加两个子类并使用
multi table inheritance
然后您可以使用
比兰特里
比尔
.
class EmittedBill(Bill):
pass
class ReceivedBill(Bill):
pass
您可能还需要考虑Django生成的数据库模型。通常,您只想在数据库中存储基本数据,而不想在页脚中存储计算数据。所以,如果价格是用一些公式和
unitaryprice
,
amount
数量
)忘记更新计算值
价格
我也不明白为什么你要一个单独的页眉和页脚每个法案。模型不是真正的账单,它存储账单的信息。如果您希望有一个可见的页眉和页脚,那么您应该在视图层(模板)中而不是在模型本身中这样做。