Фильтрация вывода данных внешнего ключа - PullRequest
1 голос
/ 23 марта 2020

Поскольку я делаю онлайн-систему бронирования по мини-футболу, в настоящее время я проверяю временной интервал. Если временной интервал уже зарезервирован, пользователь не сможет снова зарезервировать этот временной интервал.

models.py

class futsals(models.Model):
    futsal_name = models.CharField(max_length=20)
    futsal_address = models.CharField(max_length=40)
    owner_email = models.EmailField(max_length=25)
    owner_name = models.CharField(max_length=25)

        def __str__(self):
            return f'{self.futsal_name}'

    class timeslot(models.Model):
        timesslot = models.CharField(max_length=15)
        name  = models.CharField(max_length=15)

        def __str__(self):
            return f'{self.timesslot}'

    class Booking(models.Model):
        user_book =  models.ForeignKey(User, on_delete=models.CASCADE)
        futsal =  models.ForeignKey(futsals, on_delete=models.CASCADE)
        time_slot = models.ForeignKey(timeslot, on_delete=models.CASCADE)

        def validate_date(date):
            if date < timezone.now().date():
                raise ValidationError("Date cannot be in the past")

        booking_date = models.DateField( default=None, validators=[validate_date])

        def __str__(self):
            return f'{self.user_book}'

    forms.py

    def timeslot_validation(value):  

        v = Booking.objects.all().values_list('time_slot')
        k = timeslot.objects.filter(pk__in=v)

        if value == k:
            raise forms.ValidationError("This timeslot is already booked!!")

        else:
            return value

Но я не могу выполнить проверку. Поскольку вывод переменной 'k' выглядит следующим образом:

<QuerySet [<timeslot: 19:00 - 20:00>, <timeslot: 18:00 - 19:00>, <timeslot: 17:00 - 18:00>]>

Показанный выше временной интервал является временным интервалом, зарезервированным пользователями. Теперь, если другой пользователь вводит этот временной интервал, он должен показать, что этот временной интервал уже зарегистрирован.

Теперь я хочу, чтобы эти данные отображались как [(19:00 - 20:00), (18:00 - 19:00), (17:00 - 18:00)]

Буду признателен за любую помощь, или, если кто-нибудь сможет предоставить мне лучшее решение для проверки?

1 Ответ

0 голосов
/ 23 марта 2020

Вы можете добавить уникальное ограничение в поле time_slot и booking_date, и ваш ModelForm будет обрабатывать проверку того, что time_slot и booking_date уникален

class Booking(models.Model):

    class Meta:
        unique_together = (
            ('booking_date', 'time_slot'),
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...