如何制作一个 Django 表单,显示可供选择的模型对象



好的,我正在构建一个酒店应用程序,在各个酒店的预订部分,我希望在预订部分有一个下拉列表,该下拉列表将包含酒店的房间数量,以便用户可以预订特定的房间。现在每个酒店都有不同数量的房间,所以我希望根据酒店的房间数量,这个数字就是下拉列表中的房间数量。这是我的密码。。。

注册"models.py">

class Hotel(models.Model):
name = models.CharField(max_length=120, null=True)
hotel_location = models.CharField(max_length=3000, null=True)
number_of_rooms = models.IntegerField(null=True)
number_of_booked_rooms = models.IntegerField(null=True, default=0)

这是预订的"models.py">

class RoomBooking(TrackingModel):
hotel = models.ForeignKey(Hotel, on_delete=models.CASCADE)
room_number = models.ForeignKey('Room', on_delete=models.CASCADE)

class Room(TrackingModel):
hotel = models.ForeignKey(Hotel, on_delete=models.CASCADE)
room_information = models.ForeignKey(RoomBooking, on_delete=models.CASCADE)
room_number = models.IntegerField()

这是我的"views.py">

def book_a_room(请求,*args,**kwargs(:hotel_slug=kwargs['slug']hotel=酒店.objects.get(slug=hotel_sug(

form = BookingARoomForm()
if request.method == 'POST':
form = BookingARoomForm(request.POST)
if form.is_valid():
if hotel.number_of_booked_rooms < hotel.number_of_rooms:
hotel.no_rooms_available = False
if hotel.no_rooms_available == False:
hotel.number_of_booked_rooms += 1
hotel.save()
room_booking = RoomBooking.objects.create(hotel=hotel, guest=request.user, **form.cleaned_data)
Room.objects.create(hotel=hotel, room_information=room_booking, is_booked=True, checked_in=True, **form.cleaned_data)
return HttpResponse('<h1>You just booked a hotel</h1>')
else:
hotel.no_rooms_available = True
hotel.number_of_booked_rooms = hotel.number_of_rooms
hotel.save()
if hotel.no_rooms_available == True:
return HttpResponse('<h1>This hotel is maximally booked...</h1>')

以及"forms.py">

class BookingARoomForm(ModelForm):
date_to_check_in = forms.DateField(widget=forms.TextInput(attrs={'type': 'date'}), required=True)
date_to_check_out = forms.DateField(widget=forms.TextInput(attrs={'type': 'date'}), required=True)
room_number = forms.ModelChoiceField(queryset=Room.objects.all(), empty_label="(Nothing)")
class Meta:
model = RoomBooking
fields = ['date_to_check_in', 'date_to_check_out', 'room_number']

我想做的是让表格room_number是一个下拉列表,其中包含特定酒店的房间数量,我希望它是动态的,这样,如果一家酒店有7个房间,下拉列表中就会有7个,如果另一家有10个房间,则下拉列表中会有10个。你能建议我如何在视图中做到这一点,并将过滤后的对象转移到表单中吗?或者你能建议一种更合乎逻辑的方法来做更多的事情吗。

我想您正在寻找ModelChoiceField
特别要注意queryset参数。在支持页面的视图中,可以根据您关心的任何条件更改您提供的QuerySet

您想要的答案在这里很难描述所以如果你仔细阅读这篇文章会更好对于动态下拉值,您需要使用jquery/AAJAX。

https://tutorial101.blogspot.com/2020/06/django-chained-dropdown-list-select-box.html

最新更新