Django:如何正确执行CreateView重定向?

2024-06-13 03:28:09 发布

您现在位置:Python中文网/ 问答频道 /正文

要执行重定向,我需要return redirect([...])。但是,只有在我另外做def get_success_url(self):的情况下,这才有效。其中的url实际上并不重要,因为它使用的是mydef form_valid(self, form):的重定向。你知道如何避免get_success_url?你知道吗

我还测试了将返回值从form_valid移动到get_success_url。但我收到一个错误,返回丢失。你知道吗

class AdminRewardCreate(AdminPermissionRequiredMixin, SuccessMessageMixin, FormValidationMixin, AdminBaseRewardView, CreateView):
    form_class = RewardForm
    template_name = 'rewards/admin/create.html'
    success_message = _("Reward has been successfully created.")

    def form_valid(self, form):
        instance = form.save(commit=False)
        instance.event = self.request.event
        # when the super method is called the instance
        # is saved because it's a model form
        super().form_valid(form)
        return redirect(
            'rewards:admin:index',
            self.request.organizer.slug,
            self.request.event.slug
        )

    def get_success_url(self):
        return reverse(
            'rewards:admin:index',
            kwargs={
                'organizer': self.request.organizer.slug,
                'event': self.request.event.slug,
            }
        )

Tags: instanceselfformeventurlgetreturnadmin
1条回答
网友
1楼 · 发布于 2024-06-13 03:28:09

您不需要从form_valid方法调用重定向。只需返回函数的超级调用。所以我想你可以像这样更新form_valid

def form_valid(self, form):
    instance = form.save(commit=False)
    instance.event = self.request.event
    return super().form_valid(form)  # you need to return the super call

def get_success_url(self):
    return reverse(
        'rewards:admin:index',
        kwargs={
            'organizer': self.request.organizer.slug,
            'event': self.request.event.slug,
        }
    )

它应该可以解决这个问题,还请保持get_success_url实现在override中,因为它将重定向到那个成功的url。你知道吗

相关问题 更多 >