【发布时间】:2012-03-05 12:26:09
【问题描述】:
我正在尝试使用基于类的通用视图 UpdateView 更新 Django 中的模型。
我阅读了页面 Updating User model in Django with class based UpdateView 以尝试让我开始,但我收到一个错误 'WSGIRequest' object has no attribute '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'])
我可能错了。
【问题讨论】:
-
您的更新确实正确修复了原始错误。我不明白为什么你需要重写
get方法,看起来这就是UpdateView在幕后所做的。