如何为表编写自定义保存方法以将数据添加到其他表?

时间:2011-05-06 22:05:35

标签: django

我是django的新手。我正在尝试为我的业务实施小型应用程序,这是一种由人造草坪制成的足球场的租赁服务。服务基于该领域的每小时租赁。人们可以按小时租用该字段,或者他们可以选择会员选项,其中包括特定时段内一周中的特定日期和小时。我的模型中有两个类。

一个是一次性预订。人们可以在一周内的任何一天和一小时预留足球场。这很简单。

class Reservation(models.Model):
    name = models.ForeignKey(User)
    membership = models.ForeignKey((Member), blank=True, null=True, editable=False)
    date = models.DateField()
    field_name = models.ForeignKey(Field)
    fee = models.DecimalField(decimal_places=0, max_digits=3)
    is_member = models.BooleanField(default=False, editable=False)
    is_active = models.BooleanField(default=True)

    def __unicode__(self):
        return u'%s %s %s %s' % (self.date, self.user.first_name,self.user.last_name, self.field)

    class Meta:
        unique_together = (("date", "field"))

另一个会员资格。人们可以申请成为会员。当有人申请会员船时,我想自动在开始日期和结束日期之间创建当天和小时的预订,这样就不会在当天和小时进行任何一次性预订。我需要编写一个自定义保存方法,但我无法找到如何在保存成员资格表时将信息添加到预订表。我想添加成员名称并将is_member字段设为true,以便查看它是会员预订。

class Member(models.Model):
    DAY_CHOICES = (
        (1, 'PAZARTESI'),
        (2, 'SALI'),
        (3, 'CARSAMBA'),
        (4, 'PERSEMBE'),
        (5, 'CUMA'),
        (6 ,'CUMARTESI'),
        (7, 'PAZAR'),
    )
    name = models.ForeignKey(User)
    starting_date = models.DateField()
    end_date = models.DateField()
    day = models.IntegerField(max_length=1, choices=GUN_CHOICES)
    field = models.ForeignKey(Field)
    fee = models.DecimalField(decimal_places=0, max_digits=3)

    def __unicode__(self):
        return u'%s %s, %s, %s' % (self.name.first_name, self.name.last_name, self.day, self.field)

    class Meta:
        unique_together = (('date', 'field'))

你能帮忙吗?

感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用post_save信号代替覆盖保存方法。

此处解释了基本用法:http://www.djangofoo.com/85/signal-connect-disconnect-django-signals

因此,每次保存成员后,您都可以调用创建适当预留的功能。

调整示例......

def create_reservation(sender, **kwargs):
    # the object which is saved can be accessed via kwargs 'instance' key.
    member = kwargs['instance']
    print 'the object is now saved.'
    # ...create reservation...
    reservation = Reservation()
    reservation.is_member = True
    reservation.membership = member
    ....
    reservation.save()