如何基于Django中的kwargs输入限制窗体的FK选择

如何基于Django中的kwargs输入限制窗体的FK选择,django,django-models,django-views,django-forms,Django,Django Models,Django Views,Django Forms,我有一个表格,用于创建预订时段。在预订时段模型中,该时段的位置有一个外键模型 #forms.py class BookingSlotForm(ModelForm): class Meta: model = BookingSlot fields = ['date','start_time', 'end_time', 'location'] #views.py class CreateBookingForm(CreateView): templat

我有一个表格,用于创建预订时段。在预订时段模型中,该时段的位置有一个外键模型

#forms.py
class BookingSlotForm(ModelForm):
    class Meta:
        model = BookingSlot
        fields = ['date','start_time', 'end_time', 'location']


#views.py
class CreateBookingForm(CreateView):
    template_name = 'app_book/create_bookings.html'
    form_class = BookingSlotForm


#urls.py
urlpatterns =[path('create/<int:club>/', CreateBookingForm.as_view(), name="create_booking")]
这是我的位置模型(称为Court)


我们可以重写初始化
BookingSlotForm
的方法的逻辑:

class BookingSlotForm(ModelForm):
    def __init__(self, *args, club=None, **kwargs):
        super().__init__(*args, **kwargs)
        if club is not None:
            self.fields['location'].queryset = Location.objects.filter(
                club_id=club
            )

    class Meta:
        model = BookingSlot
        fields = ['date','start_time', 'end_time', 'location']

您可以共享
BookingSlot
型号吗?这是否有
俱乐部的
外键
?班级预订场地(models.Model):开始时间=models.TimeField(“开始时间”)结束时间=models.TimeField(“结束时间”)日期=models.DateField(“日期”)位置=models.ForeignKey(球场上,删除=models.CASCADE)请回答这个问题。将它编辑到那里的问题中cheers@DavidDunne,如果Willem Van Onsem的答案或任何其他答案有助于解决您的问题,请将其标记为已接受。看,哇,真管用,非常感谢威廉!
class Court(models.Model):
    court_name = models.CharField("Court Name", max_length=100)
    club = models.ForeignKey(Club, on_delete=models.CASCADE)
class BookingSlotForm(ModelForm):
    def __init__(self, *args, club=None, **kwargs):
        super().__init__(*args, **kwargs)
        if club is not None:
            self.fields['location'].queryset = Location.objects.filter(
                club_id=club
            )

    class Meta:
        model = BookingSlot
        fields = ['date','start_time', 'end_time', 'location']
class CreateBookingForm(CreateView):
    template_name = 'app_book/create_bookings.html'
    form_class = BookingSlotForm

    def get_form_kwargs(self):
        kwargs = super().get_form_kwargs()
        kwargs['club'] = self.kwargs['club']
        return kwargs