我一直在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,它按照我希望的方式进行操作,将一列书籍加载到我的模型选项字段中。这工作正常。但是,当我尝试在模型选项字段中选择其中一个条目时,似乎无法显示单个记录。我快到了... –