面对使用Django post_save信号重定向用户的问题

时间:2019-06-26 23:50:32

标签: python django

当用户创建新的聊天线程时,我想自动将其重定向到该线程。但是面临问题

以我的模型为例

class Thread(models.Model):
    name=models.CharField()
    creator=models.ForeignKey(User)
class Chat(models.Model):
    thread=models.ForeignKey(Thread)
    message=models.TextField()

用户创建了一个线程,必须将其重定向到创建的具有聊天表和线程名称的线程('app:chat',pk)。

创建线程后,我尝试使用django post_save信号重定向用户

def redirect_user(sender,instance,**kwargs)
    pk=instance.id
    url=('app:chat',pk)
    post_save.connect(redirect_user,sender=Thread)

这不起作用。请提供帮助解决此问题的好方法。

2 个答案:

答案 0 :(得分:0)

您应该在视图被自动显示的视图中执行此操作。如果该表单有效,则该模型实例应该可以访问模型实例的ID,并且您可以调用return redirect("chat", args=(new_id,)),其中“聊天”是反向名称。

答案 1 :(得分:0)

如果您使用基于Django的通用类的视图,则可以轻松获得此功能

为此,您应该使用CreateView,然后重写get_success_url方法来重定向用户。 Classy class based views是一个很棒的网站,可用于浏览通用视图的所有选项

class ThreadCreateView(CreateView):

    model = Thread

    def get_success_url(self):
        return reverse('app:chat', args=[self.object.pk])