如何基于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