簡體   English   中英

我如何制作一個 Django 表單來顯示 model 對象以供選擇

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM