Как написать собственный метод сохранения для таблицы, чтобы добавить данные в другую таблицу? - PullRequest
3 голосов
/ 07 мая 2011

Я очень новичок в Джанго.Я пытаюсь реализовать небольшое приложение для своего бизнеса, которое представляет собой услугу проката футбольного поля из искусственной травы.Сервис основан на почасовой аренде поля.Люди могут арендовать поле почасово или выбрать вариант членства, который включает определенный день и час в неделю для определенного периода.У меня есть два класса в моей модели.

Один для одноразового бронирования.Люди могут зарезервировать футбольное поле на любой день и час в неделю.Это очень просто.

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 Ответ

1 голос
/ 07 мая 2011

Вместо переопределения метода сохранения вы можете использовать сигнал 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...