我有一個叫做Space
的模型,它有一個叫做guest
的字段,這個字段是一個選擇字段,它只需要一個數字,比如說3
並將其保存在數據庫中。我有另一個模型叫做Book
,其中的字段是no_of_persons
。把ForeignKey對象轉到ChoicesField
現在,有可能是我通過Book
模型篩選'guest'
字段值是'3'
並將其顯示爲下拉(1,2,3),將不超過保存在guest
模型的數量。?
回想一下,guest
保存爲一位數字。是否可以使其顯示爲從最低數字開始的下拉菜單?
我想要做的一個很好的例子就是Airbnb上'Guests'字段的值如何與'Booking'模型中的'Guests'字段相對應。
UPDATE:
由託多爾嘗試的建議後,提示以下錯誤。
coercing to Unicode: need string or buffer, int found
模型
class Space(models.Model):
user= models.ForeignKey(User)
no_of_guest=models.CharField(max_length=30, choices=MAX_SPACE_CHOICES, verbose_name='no_of_guest')
#other fields
def __unicode__(self):
return '%s, %s, %s, %s, %s' % (self.user, self.id, self.name, self.address, self.no_of_guest)
class BookSpace(models.Model):
user= models.ForeignKey(User)
space= models.ForeignKey(Space)
check_in_date= models.DateField()
check_out_date= models.DateField()
no_of_persons= models.CharField(max_length=10)
#other fields
def __unicode__(self):
return '%s, %s, %s' % (self.user, self.space, self.full_name)
class BookSpaceForm(forms.ModelForm):
class Meta:
model= BookSpace
exclude=('#fields not needed')
def __init__(self, *args, **kwargs):
space= kwargs.pop('space')
super(BookSpaceForm, self).__init__(*args, **kwargs)
guest_choices= [(i, str(i)) for i in range(1, int(space.no_of_guest)+1)]
self.fields['no_of_persons'].widget= forms.ChoiceField(choices=guest_choices)
更新之後,我越來越
KeyError異常 u'space」 異常地點:models.py在初始化,線202
該行是:
space= kwargs.pop('space')
在我的看法:
def book_a_space(request, space_id):
space= Space.objects.get(pk=space_id)
if request.method=="POST":
form=BookSpaceForm(request.POST)
if form.is_valid():
#other data and more
else:
print form.errors
else:
form=BookSpaceForm(space=space)
return render(request, 'spaceb/book_space_form.html', {'BookSpaceForm':BookSpaceForm})
模板:
{{ BookSpaceForm.as_p }}
UPDATE:
仍然得到KeyError異常。我修改這樣的模式:
def __init__(self, *args, **kwargs):
space_id= kwargs.pop('space_id')
super(BookSpaceForm, self).__init__(*args, **kwargs)
if space_id:
guest_choices = [(str(i), str(i)) for i in range(1, int(space_id.no_of_guest)+1)]
self.fields['no_of_persons'].widget = forms.ChoiceField(choices=guest_choices)
而在我的意見,我也
def book_a_space(request, space_id):
space= Space.objects.get(pk=space_id)
if request.method=="POST":
form=BookSpaceForm(request.POST)
if form.is_valid():
#other data and more
else:
print form.errors
else:
context = {
'BookSpaceForm': BookSpaceForm(space_id=space_id),
'space_id': Space.objects.get(id=space_id)
}
return render(request, 'spaceb/book_space_form.html', context)
而且我得到這個錯誤:
'unicode' object has no attribute 'no_of_guest'
我改變了的Unicode在BookSpace型號返回:
return '%s, %s, %s' % (self.user, self.space_id.no_of_guest, self.full_name)
然而..仍然得到相同的unicode錯誤。
感謝您的答覆。這裏的主要問題是將3改爲像(1,2,3)這樣的下拉菜單。我找到了解決這個問題的方法。 – YoYo
@YoYo我用示例示例更新了我的答案,希望它有幫助。 – Todor
我得到這個錯誤:強制轉換爲Unicode:需要字符串或緩衝區,int在此行上找到guest_choices = [(i,str(i))for i in range(1,space.guest + 1)]我試過guest_choices = [(i,int(str(i)))我在範圍內(1,sharedcrib.no_of_guest + 1)]但仍然是相同的錯誤 – YoYo