#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()