2010-01-20 56 views
1

我正在尝试使用Django制作托儿管理应用程序,但我在付款代码方面存在一些问题。帮助创建Django应用程序模型

每个孩子每年需要支付10次。这些付款有一些特殊性:

  • 根据父母的经济情况,有些孩子可能会支付不同的金额。

  • 付款金额可能会在一年内发生变化。

  • 付款可以在不同的机会中支付。

  • 工作坊和食品被添加到付款的总价值(他们是可选的)。

我有问题才能建模此应用程序。我在想创建一个孩子模式和支付模式:

class Kid(models.Model): 
    food = models.BooleanField() 
    workshop = models.BooleanField() 
    special_price = models.DecimalField(blank=True) 

class Payment(models.Model): 
    kid = models.ForeignKey(Kid) 
    date = models.DateField() 
    amount = models.DecimalField()` 

假设我要在给定日期多moneya孩子(父母)怎么也得付出就知道了。我不知道如何解决变化的价值问题(食品和工场的价值也可能在一年中发生变化)。

希望你能理解我,谢谢。 mF。

+3

其他人跆拳道阅读标题时? – 2010-01-20 18:51:43

+2

确实。我也WTF'd。 – 2010-01-20 18:53:50

+1

您应该考虑将此问题的标题修改为更具体一些,比如“需要帮助为Django应用程序创建模型”,并且可能会添加一个面向对象的标记。乍一看这个问题看起来像垃圾邮件。 :-) – 2010-01-20 18:54:42

回答

0

无论您最终的模型将如何模样,假设你将保持付款模式,你可以给它添加两个字段:

payment_date = model.DateField() 
    already_paid = models.BooleanField() 

然后,为了获取逾期付款,您将能够使一个查询:

Payment.objects.filter(payment_date__lte=datetime.date.today(), already_paid=False) 

拥有这些支付对象,您将能够计算确切的金额。

0

我会根据孩子的属性计算付款,所以通过更新孩子的付款会发生变化。在付款之前,付款不会成为数据库中的条目,每次用户请求付款时都会计算付款。

class Child(object): 
    def __init__(self,income,paydate,meals=False,workshops=False): 
     self.income = income 
     self.paydate = paydate 
     ... 

我也有一个定价规则模型,与子对象结合会给你付款金额。再次更新PricingRules将更改付款。

class PricingRules(object): 
    def __init__(self,income_scale,paydate,meal_price,workshop_price,num_payments): 
     ... 

我会避免每个Child都有PricingRules对象。届时,将成为支付对象

class Payment(object): 
    def __init__(self,amount,date_paid): 
     ... 

我避免显示出特定于ORM正在使用的任何代码,我认为设计应该站在自己的,我也想保持的可能性敞开的使用没有ORM的对象。使用构造函数也是我的个人风格,我喜欢知道当从一个类创建一个对象时,它将处于一个定义良好且稳定的状态。没有关于业务逻辑的更多细节,我有更多的问题,而不是超越这一点。