【问题标题】:redirect to profile after creating a user which auto create a profile创建自动创建配置文件的用户后重定向到配置文件
【发布时间】:2020-08-03 15:48:40
【问题描述】:

抱歉打扰了,我是一名初学者,正在开发我的新项目。

我制作了这个模型,它会在创建用户时创建个人资料:

class ExpertSignUpForm(UserCreationForm):
    class Meta(UserCreationForm.Meta):
        model = User

@transaction.atomic
def save(self):
    user = super().save(commit=False)
    user.is_expert = True
    user.save()
    expert = Expert.objects.create(expert=user)
    return user

这就是视图。所以我在这里要做的是签署一个用户,然后将他的权限设置为专家,然后将他登录,我已经完成了但我不能做的是将他重定向到他的专家详细信息/更新登录后立即配置文件。 所以如果你能帮助我。提前谢谢你。

以下是观点:

class ExpertSignUpView(CreateView):
        model = User
        form_class = ExpertSignUpForm
        template_name = 'registration/signup_form.html'

        def get_context_data(self, **kwargs):
            kwargs['user_type'] = 'expert'
            return super().get_context_data(**kwargs)

        def form_valid(self, form):
            user = form.save()
            login(self.request, user)
            return redirect('/') <<-------

网址可能会有所帮助

urlpatterns = [
    path('',ExpertListView.as_view(), name='list'),
    path('Esignup/',ExpertSignUpView.as_view(), name='expert_signup'),
    path('Ssignup/',StudentSignUpView.as_view(), name='student_signup'),
    path('create/',ExpertCreateView.as_view(), name='create'),
    path('<str:pk>/',ExpertDetailView.as_view(), name='detail'),
    path('<str:pk>/update/',ExpertUpdateView.as_view(), name='update'),
    path('<str:pk>/delete/',ExpertDeleteView.as_view(), name='delete'),
    ]

【问题讨论】:

    标签: python django redirect django-urls


    【解决方案1】:

    您可以尝试更改 urlpatterns 以便首先处理限制性最强的内容

    urlpatterns = [  
        path('Esignup/',ExpertSignUpView.as_view(), name='expert_signup'),
        path('Ssignup/',StudentSignUpView.as_view(), name='student_signup'),
        path('create/',ExpertCreateView.as_view(), name='create'),
        path('<str:pk>/',ExpertDetailView.as_view(), name='detail'),
        path('<str:pk>/update/',ExpertUpdateView.as_view(), name='update'),
        path('<str:pk>/delete/',ExpertDeleteView.as_view(), name='delete'),
        path('',ExpertListView.as_view(), name='list'),
    ]
    

    然后在你的重定向中给出你想要去的路径表达式

    return redirect('app_name:update')
    

    【讨论】:

    • 感谢您的帮助 IndikaM。但现在我得到(“更新”的反向,没有找不到参数。尝试了 1 个模式:['profiles/(?P[0-9]+)/update/$']) 然后尝试在配置文件之后将 pk=pk 作为参数添加:更新并得到(名称 'pk' 未定义)错误,如果您能进一步帮助我提前谢谢您
    • in url's path('/details/',ExpertDetailView.as_view(), name='detail') 在视图中返回redirect('detail', pk=user)
    猜你喜欢
    • 2020-04-02
    • 2011-08-05
    • 2015-06-24
    • 2016-03-15
    • 2011-03-06
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多