【问题标题】:redirect user after update in class based view in django在 django 中基于类的视图中更新后重定向用户
【发布时间】:2017-09-13 08:53:22
【问题描述】:

我正在使用 Django 1.11。

我正在使用基于类的视图来更新个人资料页面,以更新身份验证用户个人资料信息。

myapp/accounts/views.py

class UpdateProfile(UpdateView):
    model = User
    fields = ['first_name', 'last_name']

    template_name = 'accounts/update.html'

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.request = None

    def get_object(self, queryset=None):
        return self.request.user

这适用于更新配置文件。但是更新后报错

No URL to redirect to.  Either provide a url or define a get_absolute_url method on the Model.

我遵循了一些 YouTube 教程 here 使用基于方法的视图和 form.py 生成表单,在那里我可以检查请求方法并调用 form.save() 然后将用户重定向到个人资料页面(可能是索引)。

1.如何检查数据是否更新,然后将用户重定向到我班级中的index 班级?

2。这个方法适合用pk编辑数据吗?

我还想在更新后生成可以使用的 Flash 消息

messages.success(request, "Profile updated")

3.由于类没有请求对象,如何在基于类的视图中使用messages?

【问题讨论】:

    标签: python django django-class-based-views django-1.11


    【解决方案1】:

    您可以使用get_success_url 方法。

    def get_success_url(self):
        messages.success(self.request, 'Profile updated')
        return '/' # or whatever url you want to redirect to
    

    对象请求在self 中。请注意,我不明白为什么在你的初始化中你正在做self.request = None。

    【讨论】:

    • 如果__init__ 没有用,我是否应该删除它,因为这是从您对我上一个问题的回答中复制而来,并且您已经在那里编辑了您的答案。
    • 嗯,我没有在我的其他答案中写任何__init__(),但是是的,你可以删除它
    • 其实是的,删除它
    • 您的返回语句return '/' 会将用户重定向到基本网址。如何重定向到同一应用程序中的另一个基于类的视图,例如 Class ProfileView(TemaplateView): 或另一个应用程序的 Classview?
    • 你可以使用 django 的 urlreverse 模块。一些文档:docs.djangoproject.com/en/1.11/ref/urlresolvers/#reverse
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 2017-06-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    相关资源
    最近更新 更多