Django | Показывать только внешние ключи, которые еще не назначены в форме django

Я делаю систему бронирования на django, где пользователь выбирает дату, а затем может посмотреть, какое время доступно на эту дату.

Models.py

class Slot(models.Model):

    title = models.CharField(max_length=50)

    def __str__(self):
        return f'There is a slot at {self.title}'


class Booking(models.Model):

    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                             on_delete=models.CASCADE)
    slot = models.ForeignKey(Slot, on_delete=models.CASCADE,
                             null=True, blank=True, related_name='all_times')
    booking_date = models.CharField(max_length=15, default='foo')


    def __str__(self):
        return f'{self.user} has booked a session at {self.slot.title} on {self.booking_date}'

Где модель слота - это время, которое можно выбрать (например, 9-10, 1-2 и т.д.)

Views.py

def DateView(request):
    form = DateForm(request.POST or None)
    if form.is_valid():
        request.session["dateSelected"] = str(
            form.cleaned_data["booking_date"])

        return redirect('../create/')
    context = {
        'form': form
    }
    return render(request, "bookingapp/date_form.html", context)


def BookingView(request):
    instance = Booking(booking_date=request.session.get('dateSelected'))
    form = BookingForm(request.POST or None,  instance=instance)
    if form.is_valid():
        form.save()
        form = BookingForm
    context = {
        'form': form
    }
    return render(request, "bookingapp/book_form.html", context)

Forms.py

class DateInput(forms.DateInput):
    input_type = 'date'


class DateForm(forms.ModelForm):
    class Meta:
        model = Booking
        fields = [
            'booking_date',
        ]
        widgets = {'booking_date': DateInput()}


class BookingForm(forms.ModelForm):
    class Meta:
        model = Booking
        fields = [
            'user',
            'slot',
            'booking_date',
        ]
        widgets = {'booking_date': forms.HiddenInput()}


Первая форма позволяет пользователю выбрать дату, которая затем приводит его ко второй форме, где он может выбрать желаемый временной интервал.

Это мои шаблоны

book_form.html

<body>

    <form method="POST">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" value="Save" />
    </form>
</body>

date_form.html


    <form method="POST">
        {% csrf_token %}
        <input type="date" id="booking_date" name="booking_date">

        <!-- {{ form.as_p }} -->
        <input id="check" type="submit" value="Check" />
    </form>
    def __init__(self, *args, **kwargs):
        super(BookingForm, self).__init__(*args, **kwargs)
        self.fields['slot'].queryset = Slot.objects.filter(
            Q(all_times__slot__isnull=True)
        )

Добавив это в BookingForm, я могу показать только время, которое еще не было выбрано (из этого вопроса Django | Don't show the foreign key valules in dropdown which are already assigned), но я не могу сделать это специфичным для выбранной даты

Вернуться на верх