gpt4 book ai didi

python - 在 Django ModelchoiceField 中过滤外键值时出现空白结果

转载 作者:行者123 更新时间:2023-12-01 03:54:11 25 4
gpt4 key购买 nike

我有三个模型,它们相互充当“外键”。

酒店模型

class Hotel(model.Models):
user= models.ForeignKey(User)
name= models.CharField(max_length=100, verbose_name='hotel_name')
address= models.CharField(max_length=100, verbose_name='hotel_address')
#more fields

房间模型

class HotelRooms(models.Model):
hotel= models.ForeignKey(Hotel, related_name='myhotels')
slug=models.SlugField(max_length=100, unique=True)
room_name=models.CharField(max_length=100, verbose_name='Room Name')
#other fields

酒店日历模型

class HotelCalendar(models.Model):
user=models.ForeignKey(User)
hotel=models.ForeignKey(Hotel)
hotelrooms=models.ForeignKey(HotelRooms)
#other fields

现在,我想以 HotelCalender 形式显示属于酒店的所有房间,以便业主选择他/她想要更新和保存的房间。

酒店日历表格

class HotelCalendarForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(HotelCalendarForm, self).__init__(*args, **kwargs)
self.fields['hotelrooms'].queryset= HotelRooms.objects.filter(hotel=self.instance.hotel_id)

模板

<form id="post_form" method="post" action=""
enctype="multipart/form-data">

{% csrf_token %}

{{ HotelCalendarForm.as_p }}


<input type="submit" name="submit" value="Submit" />
</form>

观看次数

def hotel_calendar_view(request, hotel_id):
if request.method=="POST":
form=HotelCalendarForm(request.POST)
if form.is_valid():
data=form.cleaned_data
newbookdate=HotelCalendar(
user=request.user,
hotel=Hotel.objects.get(id=hotel_id),
hotelrooms=data['hotelrooms'],)
newbookdate.save()
return render(request, 'notice.html')
#other code here

当我加载表单时,它不会返回任何值,模型选择字段只是空白。

我错过了什么?

最佳答案

您似乎正在尝试在 GET 请求上加载表单时,使用酒店过滤后的结果填充 hotelrooms 字段。如果是这种情况,该字段将不会加载任何数据,因为 instance 变量将为 None

对于初始数据,您需要在 GET 请求上初始化表单时将酒店 ID 传递给表单,并在表单中使用酒店 ID 加载数据,而不是 instance.hotel_id 。例如:

views.py

@login_required
def hotel_calendar_view(request, hotel_id):
if request.method=="POST":
## code to post the form data
else:
context = {
'HotelCalendarForm’: HotelCalendarForm(hotel_id=hotel_id),
'hotel': Hotel.objects.get(id=hotel_id)
}
return render(request, 'hotels/hotel_calendar.html', context)
# return default response

然后在您的表单中:

forms.py

class HotelCalendarForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
hotel_id = kwargs.pop(“hotel_id”, None)
super(HotelCalendarForm, self).__init__(*args, **kwargs)
if hotel_id:
self.fields['hotelrooms'].queryset=HotelRooms.objects.filter(hotel=hotel_id)

关于python - 在 Django ModelchoiceField 中过滤外键值时出现空白结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37788444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com