我一直在Django的工作了約3個月,現在感覺我越來越好一點,我的工作一直到基於類的觀點。表面上看起來更清晰,更容易理解,在某些情況下,它們是。在其他人中,不是那麼多。我想通過ModelChoiceField和一個窗體使用簡單的下拉視圖。我可以爲我的views.py文件中顯示它下面用一個基於功能視圖的工作:基於Django的類視圖隨着ModelChoiceField
def book_by_name(request):
form = BookByName(request.POST or None)
if request.method == 'POST':
if form.is_valid():
book_byname = form.cleaned_data['dropdown']
return HttpResponseRedirect(book_byname.get_absolute_url1())
return render(request,'library/book_list.html',{'form':form})
這是我在forms.py形式:
class BookByName(forms.Form):
dropdown = forms.ModelChoiceField(queryset=Book.objects.none())
def __init__(self, *args, **kwargs):
super(BookByName, self).__init__(*args, **kwargs)
self.fields['dropdown'].widget.attrs['class'] = 'choices1'
self.fields['dropdown'].empty_label = ''
self.fields['dropdown'].queryset = Book.objects.order_by('publisher')
此代碼的工作。當我嘗試轉換爲基於類的視圖時,這是麻煩開始的時候。我試圖做這樣的事情在views.py:
class BookByNameView(FormView, View):
form_class = BookByName
initial = { 'Book' : Book }
template_name = 'library/book_list.html'
def get(self, request, *args, **kwargs):
form = self.form_class(initial=self.initial)
return render(request, self.template_name, {'form': form})
def get_success_url(self, *args):
return reverse_lazy('library:book_detail', args = (self.object.id,))
當使用這種具有相同的形式,我收到一個屬性差錯,
「BookByNameView」對象有沒有屬性「對象」。
我試過ListView以及一路上收到其他一些錯誤。該get_success_url還需要採取一個主鍵,我無法弄清楚如何獲得,表明通過了爲好。同樣,我3個月的Django的新手,所以請溫柔,在此先感謝您的想法和建議!我感覺自己在場上......只是找不到我的座位!我非常樂意以不同的方式做到這一點,如果有更清潔/更好的方式來做到這一點!
基於最新的反饋,它會出現基於搜索應該像類:
class BookNameView(FormView):
form_class = BookName
template_name = 'library/book_list.html'
def get_success_url(self, *args):
return reverse_lazy('library:book_detail')
這是正確的嗎?我運行了這個測試版本,並回應你爲什麼我使用self.object.id的問題,我試圖從modelchoicefield中獲取pk,我正在使用它返回我想要獲取的視圖。這可能是我有點失落的地方。我試圖讓從modelchoicefield下拉列表中詳細視圖,並返回所選的書。但是,我似乎無法成功地將pk傳遞給此視圖。
我更新了我的代碼...
class BookByNameView(FormView, ListView):
model = Book
form_class = BookByName
template_name = 'library/book_list.html'
def get_success_url(self, *args):
return reverse_lazy('library:book_detail')
但現在它說錯誤...反向對沒有沒找到參數「book_detail」。
感謝您抽出寶貴的時間來回答我的問題。正如我寫的,我是新手,因此我在論壇上提出了問題。你能詳細說明語法嗎? –
我根據您的意見更新了代碼,這是否接近您的建議? –
玩了一些之後,我更新了視圖以使用ListView,它按照我希望的方式進行操作,將一列書籍加載到我的模型選項字段中。這工作正常。但是,當我嘗試在模型選項字段中選擇其中一個條目時,似乎無法顯示單個記錄。我快到了... –