クラスベースの汎用ビューUpdateViewを使用して、Django=でモデルを更新しようとしています。
私はページを読みます DjangoクラスベースのUpdateView でユーザーモデルを更新して試してみますが、 mエラー 'WSGIRequest'が発生しましたオブジェクトに属性 'id'がありません
私はDjangoの新人なので、愚かなことをしていても許してください。
//urls.py
url(r'^portfolios/update/(?P<id>\d+)/$',PortfoliosUpdateView.as_view()),
//views.py
class PortfoliosUpdateView(UpdateView):
form_class = PortfoliosCreateForm
model = Portfolios
template_name = 'portfolios/create.html'
def get(self, request, **kwargs):
self.object = Portfolios.objects.get(id=self.request.id)
form_class = self.get_form_class()
form = self.get_form(form_class)
context = self.get_context_data(object=self.object, form=form)
return self.render_to_response(context)
def get_object(self, queryset=None):
obj = Portfolios.objects.get(id=self.request.id)
return obj
それはほとんどが最初に投稿されたコードの修正バージョンですが、私はそれがうまくいくと思っていました。 GETパラメーターとして渡されたIDを取得しようとしていることはわかっていますが、リクエスト変数では取得されないようです。私はこれを間違った方法で行っていますか?
ありがとう
編集:私はそれを修正したと思いますが、これは間違っているかもしれません:私は行を変更しました
self.object = Portfolios.objects.get(id=self.request.id)
obj = Portfolios.objects.get(id=self.request.id)
に
self.object = Portfolios.objects.get(id=self.kwargs['id'])
obj = Portfolios.objects.get(id=self.kwargs['id'])
私は間違っている可能性があります。
そのはず:
def get_object(self, queryset=None):
obj = Portfolios.objects.get(id=self.kwargs['id'])
return obj
クラスベースの汎用ビューを見て、ディスパッチはキーワード引数がself.kwargsに割り当てられることを説明しています。
def dispatch(self, request, *args, **kwargs):
# Try to dispatch to the right method; if a method doesn't exist,
# defer to the error handler. Also defer to the error handler if the
# request method isn't on the approved list.
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
self.request = request
self.args = args
self.kwargs = kwargs
return handler(request, *args, **kwargs)
id = self.request.GET.get('id',None)
は、GETクエリ文字列にアクセスするときに必要なものです。
ただし、ビューは簡略化できます。
from Django.conf.urls import *
from Django.views.generic import UpdateView
from yourapp.models import Portfolios
from yourapp.forms import PortfoliosCreateForm
urlpatterns = patterns('',
url('^portfolios/update/(?P<pk>[\w-]+)$', UpdateView.as_view(
model=Portfolios,
form_class=PortfoliosCreateForm,
template_name='portfolios/create.html',
success_url='/portfolios'
), name='portfolio_update'),
)