我正在将一个项目从 Django 1.2 迁移到 Django 1.5。该项目使用了基于函数的视图,例如:
def notecard_product(request, stockcode):
if request.user.is_authenticated():
liked = Recommendation.objects.values_list('product_id',flat=True).filter(recommended=True, user=request.user)
unliked = Recommendation.objects.values_list('product_id',flat=True).filter(recommended=False, user=request.user)
extra_context = {"liked" : liked, "unliked":unliked}
else:
extra_context = {"liked" : [0], "unliked": [0]}
return object_detail(request, queryset=Product.objects.live(),
object_id=stockcode,
extra_context=extra_context,
template_name='products/notecard.html', template_object_name='notecard_product')`enter code here`
在此摘录中,stockcode
从 URL 中捕获并用于确定object_id
. 所以我想知道如何在基于类的视图中做到这一点。这是我到目前为止所拥有的:
class NotecardProductListView(ListView):
queryset=Product.objects.live()
pk=self.kwargs['stockcode']
template_name='products/notecard.html'
context_object_name='notecard_product'
def get_context_data(self, **kwargs):
context = super(BooksListView, self).get_context_data(**kwargs)
if self.request.user.is_authenticated():
liked = Recommendation.objects.values_list('product_id',flat=True).filter(recommended=True, user=self.request.user)
unliked = Recommendation.objects.values_list('product_id',flat=True).filter(recommended=False, user=self.request.user)
extra_context = {"liked" : liked, "unliked":unliked}
else:
extra_context = {"liked" : [0], "unliked": [0]}
context.update(extra_context)
return context
pk
是旧object_id
kwarg 的新名称。显然,这段代码不起作用,因为我无法self
在函数之外访问。但我不确定如何做到这一点。我需要pk
在关键字参数中设置一些东西,但找不到这样做的方法,因为pk
需要在任何函数之外的类主体中设置。我也没有办法进行实验和尝试,因为由于不推荐使用的函数调用,整个项目现在都被破坏了。
谢谢!