我正在尝试使用基于类的通用视图UpdateView更新Django中的模型.
我阅读了使用基于类的UpdateView在Django中更新用户模型的页面,试着让我开始,但是我收到一个错误'WSGIRequest'对象没有属性'id'
我是Django的新面孔,所以如果我做一些愚蠢的事情,请原谅.
//urls.py
url(r'^portfolios/update/(?P<id>\d+)/$',PortfoliosUpdateView.as_view()),
Run Code Online (Sandbox Code Playgroud)
//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
Run Code Online (Sandbox Code Playgroud)
它主要只是最初发布的代码的修改版本,但我认为它有用.我知道我正在尝试检索作为GET参数传递的id,但在请求变量中似乎没有.我是以错误的方式来做这件事的吗?
谢谢
编辑:我想我修好了,但这可能是错的:我换了线
self.object = Portfolios.objects.get(id=self.request.id)
obj = Portfolios.objects.get(id=self.request.id)
Run Code Online (Sandbox Code Playgroud)
至
self.object = Portfolios.objects.get(id=self.kwargs['id'])
obj = Portfolios.objects.get(id=self.kwargs['id'])
Run Code Online (Sandbox Code Playgroud)
我错了.
bmi*_*lac 24
它应该是:
def get_object(self, queryset=None):
obj = Portfolios.objects.get(id=self.kwargs['id'])
return obj
Run Code Online (Sandbox Code Playgroud)
查看基于类的通用视图调度解释关键字参数已分配给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)
Run Code Online (Sandbox Code Playgroud)
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'),
)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
45320 次 |
最近记录: |