在 Django Views 中将代码从 FBV 转换为 CBV
Converting codes from FBV to CBV in Django Views
我目前正在将基于函数的视图转换为基于 class 的视图。在我的模板上,我通过 input
标签获得了一个值。
<input name="search_text" type="text">
得到值后,我在FBV中对值进行如下处理
def search(request):
search_text = request.GET.get('search_text')
search_stores = Store.objects.filter(Q(businessName__icontains=search_text) | Q(mKey__icontains=search_text))
但是现在,我想将代码转换为 CBV。
我该怎么做?
更新
def search(request):
search_text = request.GET.get('search_text')
sorter = request.GET.get('sorter')
if not sorter:
sorter = 'popularity'
if search_text:
search_stores = Store.objects.filter(Q(businessName__icontains=search_text) | Q(mKey__icontains=search_text))
if sorter == 'businessName':
search_stores = search_stores.order_by(sorter)
else:
search_stores = search_stores.order_by(sorter).reverse()
else:
search_stores = ''
for store in search_stores:
store.mKey = store.mKey.split(' ')
return render(request, 'boutique/search.html', {
'search_stores': search_stores,
'search_text': search_text,
'sorter': sorter,
})
这是您使用 ListView
的解决方案
from django.views.generic import ListView
class SearchView(ListView):
template_name = 'template.html'
model = Store
def get_queryset(self):
search_text = self.kwargs['search_text']
object_list = self.model.objects.filter(Q(businessName__icontains=search_text) | Q(mKey__icontains=search_text))
return object_list
我目前正在将基于函数的视图转换为基于 class 的视图。在我的模板上,我通过 input
标签获得了一个值。
<input name="search_text" type="text">
得到值后,我在FBV中对值进行如下处理
def search(request):
search_text = request.GET.get('search_text')
search_stores = Store.objects.filter(Q(businessName__icontains=search_text) | Q(mKey__icontains=search_text))
但是现在,我想将代码转换为 CBV。 我该怎么做?
更新
def search(request):
search_text = request.GET.get('search_text')
sorter = request.GET.get('sorter')
if not sorter:
sorter = 'popularity'
if search_text:
search_stores = Store.objects.filter(Q(businessName__icontains=search_text) | Q(mKey__icontains=search_text))
if sorter == 'businessName':
search_stores = search_stores.order_by(sorter)
else:
search_stores = search_stores.order_by(sorter).reverse()
else:
search_stores = ''
for store in search_stores:
store.mKey = store.mKey.split(' ')
return render(request, 'boutique/search.html', {
'search_stores': search_stores,
'search_text': search_text,
'sorter': sorter,
})
这是您使用 ListView
的解决方案from django.views.generic import ListView
class SearchView(ListView):
template_name = 'template.html'
model = Store
def get_queryset(self):
search_text = self.kwargs['search_text']
object_list = self.model.objects.filter(Q(businessName__icontains=search_text) | Q(mKey__icontains=search_text))
return object_list