как создать выпадающий список от (1 до 9), чтобы пользователь мог выбрать, сколько билетов забронировать? - PullRequest
0 голосов
/ 02 июня 2019

, так что я работаю над проектом онлайн-бронирования поездов, и мой проект работает нормально, но только пользователь может забронировать 1 время ticketeach, и я хочу, чтобы он мог забронировать более 1 билета, исходя из этого выбора, также создайте суммуформ в виде билетов и я новичок с django, и я не знаю, с чего начать искать решение для этого: (

Views.py

imports...
# Get an instance of a logger
logger = logging.getLogger(__name__)

# Create your views here.
def details_page(request):
    if request.method == 'GET':
        end_station_id = request.GET.get('station')
    elif request.method == 'POST':
        end_station_id = request.POST.get('to_station')
    # print(request.GET.get('to_station'))
    # Ticket.objects.filter(pk__in=[1,2,3,4,5,6,7,8,9])
    trips = Trip.objects.filter(end_station_id=end_station_id)
    context = {'trips': trips}
    return render(request, 'details/details.html', context)


def trips_page(request, trip_id):
    trip = get_object_or_404(Trip, pk=trip_id)
    error = None
    ticket = None
    if request.method == 'POST':
        first_name = request.POST.get('first_name')
        middle_name = request.POST.get('middle_name')
        last_name = request.POST.get('last_name')
        email = request.POST.get('email')
        gender = request.POST.get('gender')
        ticket = Ticket(trip=trip, first_name=first_name, middle_name=middle_name,
                        last_name=last_name, email=email, gender=gender)
        try:
            ticket.full_clean()
            ticket.save()
            return redirect('tickets', ticket_id=ticket.id)
        except ValidationError as e:
            error = dict(e)
            print(e)
    context = {'trip': trip, 'error': error, 'ticket': ticket}
    return render(request, 'details/trips.html', context)


Models.py

class Ticket(models.Model):
    GENDER = (
        ('m', 'Male'),
        ('f', 'Female'),
    )

    trip = models.ForeignKey(Trip, related_name="tickets", null=True, on_delete=models.CASCADE)
    booking_time = models.DateTimeField(auto_now_add=True, blank=True)
    first_name = models.CharField(validators=[validate_string], null=True, max_length=100, blank=False)
    middle_name = models.CharField(validators=[validate_string], null=True, max_length=100, blank=False)
    last_name = models.CharField(validators=[validate_string], null=True, max_length=100, blank=False)
    email = models.EmailField(max_length=70, blank=True, null=True)
    gender = models.CharField(max_length=1, choices=GENDER)

    def __str__(self):
        return "{}".format(self.first_name)

1 Ответ

0 голосов
/ 02 июня 2019

Один из способов сделать это - позволить пользователю выбрать количество билетов, которые он хочет приобрести, и создать их по одному (как в моем примере) или с помощью bulk_create * 1002. *. Один за другим позволяет получить каждый из идентификаторов.

def trips_page(request, trip_id):
    # ...
    if request.method == 'POST':
        # ...
        ticket_count = request.POST.get('ticket_count', 1)
        tickets_ids = []

        for i in range(ticket_count):
            # create ticket here
            # append tickets ids

        if error is None:
            return redirect('tickets', tickets_ids=tickets_ids)

    context = {'trip': trip, 'error': error, 'ticket': ticket}
    return render(request, 'details/trips.html', context)

Проблема с этим решением заключается в том, что либо вы вводите всю личную информацию пользователей для каждого билета (имя, фамилию и т. Д.), Либо вы позволяете пользователю вводить эту информацию впоследствии.

Один из способов сделать это - иметь модель Order, с которой связаны заявки. Например, после совершения покупки вы можете ввести информацию для каждого билета на следующей странице / в форме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...