[英]How do I add one model objects to another model’s ModelForm template with many to one relationship in Django?
[英]How do I make a Django form that display's model objects to chose from
好的,我正在構建一個酒店應用程序,在各個酒店的預訂部分,我希望在預訂部分有一個下拉列表,該下拉列表將包含酒店擁有的房間數量,以便用戶可以預訂特定房間。 現在每家酒店都有不同數量的房間,所以我希望它是基於酒店擁有的房間數量,該數字將是下拉菜單中的房間數量。 這是我的代碼...
注冊'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(request, *args, **kwargs): hotel_slug = kwargs['slug'] hotel = Hotel.objects.get(slug=hotel_slug)
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 個房間。 您能否建議我如何在視圖中執行此操作並將過濾后的 object 傳輸到 forms 或者您能否建議一種更合乎邏輯的方法來做更多的事情。
我認為您正在尋找ModelChoiceField 。
特別注意queryset參數。 在支持頁面的視圖中,您可以根據您關心的任何標准更改您提供的QuerySet
。
如果您通過這篇文章 go 您需要在此處描述您正在尋找的答案,那么您需要將 jquery/AJAX 用於動態下拉值。
https://tutorial101.blogspot.com/2020/06/django-chained-dropdown-list-select-box.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.