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

#django

#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:

Вместо переопределения метода сохранения вы могли бы использовать 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()