プロジェクトを 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
また、非推奨の関数呼び出しのためにプロジェクト全体が現在壊れているため、実際に実験して試す方法もありません。
ありがとう!