@excels

Как сгенерировать билеты при создании матча?

Суть сайта билеты на футбольные матча и я не совсем понимаю как мне сделать так, чтоб при добавлении матча(модель Матчи) сразу генерировались условно 500 билетов на матч.У билета должен быть номер, чтоб пользователь могу сразу вернуть его по номеру(но я так понимаю это можно сделать по id, так что это не особо важно)

Изначально хотел сделать что-то вроде "sh-dmS4p10"
где:
sh-dm это короткое название (например Шахтер - Динамо) в моей модели Matches это slug
S - сектор
p - место

Но возможно есть более лучшие реализации? Сам алгоритм генерации то я может и понял, но как правильно это в писать в Джанго?

Модели (Tictets только начал)
class Matches(models.Model):
    title = models.CharField('Название матча', max_length=100)
    photo = models.ImageField('Фото')
    price = models.CharField('Цена билета', max_length=40)
    numb_tickets = models.IntegerField('Кол-во билетов')
    date = models.DateTimeField('Дата')
    slug = models.SlugField(default='slag')

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = 'Матч'
        verbose_name_plural = 'Матчи'


class Tickets(models.Model):
    match = models.ForeignKey('Matches', on_delete=models.CASCADE)
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ответы на вопрос 1
AlexNest
@AlexNest
Работаю с Python/Django
По идее, в билетах добавить charfield, куда и будет записываться код билета и в цикле генерировать и сохранять записи.
Что-то вроде этого
for line in range(1,10):
	for place in range(1,50):
		print(f'Билет на {line}-й ряд, {place}-е место')

9Pry9YMCTIE.jpg?size=979x512&quality=96&sign=14119bdb09c0682256f9d76c4b0aa345&type=album
Только вместо принта сохранять в базу.
Конкретно по реализации, этот код вынести в отдельную функцию и вызывать из метода save у Matches c указанием pk (можно и в самом методе, конечно, но пункт ниже).
Не обязательно, но желательно - выполнять данную функцию асинхронно, чтобы не "ложить" систему, пока будет идти процесс.
(Для этого стоит использовать Celery + reddis/rabbitMQ)
P.s. Цикл in range() не захватывает последнее число (Видно на скрине в примере, задано 50 мест, но последнее - 49)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы