the*_*eve 30 django django-forms django-class-based-views
我正在尝试使用基于类的UpdateView更新Django User模型,该模型会自动呈现给当前用户,但是我遇到了需要pk或slug的错误.表单工作并使用适当的当前用户上下文呈现,但在我尝试提交更改时会抛出错误.以下是我使用的视图:
class UserUpdateView(UpdateView):
form_class = UserForm
model = User
template_name = 'members/user_update.html'
def get(self, request, **kwargs):
self.object = User.objects.get(username=self.request.user)
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 form_valid(self, form):
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.save()
return HttpResponseRedirect(self.get_success_url())
Run Code Online (Sandbox Code Playgroud)
the*_*eve 31
我需要覆盖get_object()更新视图上的方法,不需要覆盖form_valid.自定义get_object()方法是:
def get_object(self, queryset=None):
return self.request.user
Run Code Online (Sandbox Code Playgroud)
我知道这是一个旧帖子,但有些东西对我来说很突出,这个评论是给新人的信息。
self.object 的 get 调用将起作用,但它不匹配实际字段以获取用户名,因为它提供用户实例:
self.object = User.objects.get(username=self.request.user)
Run Code Online (Sandbox Code Playgroud)
您应该将用户名参数与实例用户名参数匹配:
self.object = User.objects.get(username=self.request.user.username)
Run Code Online (Sandbox Code Playgroud)
更好的是,使用 pk (id):
self.object = User.objects.get(pk=self.request.user.pk)
Run Code Online (Sandbox Code Playgroud)
可能有一种更简洁的方法来做到这一点,所以我愿意接受建议。
| 归档时间: |
|
| 查看次数: |
17976 次 |
| 最近记录: |