我可以让“get_absolute_url”返回相关的模态详细信息视图吗?

2024-10-04 11:25:55 发布

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

所以我有一个Django项目,其中包括一个名为“艺术家”的模型。我已经创建了所有与模型相关联的变量现在我想为每个艺术家包含一个评论功能,所以我创建了一个名为“ArtistComment”的模型:

class ArtistComment(models.Model):
     author = models.ForeignKey(User, default=1)
     artist = models.ForeignKey(Artist, on_delete=models.CASCADE, related_name='artistcomment')
     message = models.TextField(max_length=1000)
     created_at = models.DateTimeField(auto_now_add=True)
     approved = models.BooleanField(default=True)

     def approve(self):
         self.approved_comment = True
         self.save()

     def get_absolute_url(self):
         return reverse('events:artistdetail', kwargs={'pk': self.pk})

     def __str__(self):
         return self.created_at.strftime('%H: %M - %d %b')

我的网址.py看起来像这样:

^{pr2}$

我的ArtistComment CreateView如下所示:

class ArtistCommentCreate(CreateView):
    model = ArtistComment
    fields = ['artist', 'message',]

    def form_valid(self, form, **args):
        form.instance.author = self.request.user
        self.object = form.save()
        return super(ArtistCommentCreate, self).form_valid(form)

最后,ArtistDetail视图中的URL如下所示:

<a data-toggle="modal" data-target="#artistcommentModal" href="{% url 'events:artistcomment-add' %}">Add A New Comment</a></p>

(我使用modal div使表单弹出)

我的问题是,当我提交一个新的评论时,“get_absolute_url”会返回ArtistComment的主键,而不是ArtistComment相关的艺术家。如何使表单重定向到它刚刚提交评论的艺术家页面?在

我也考虑过在CreateView中添加一个success\u url,但是我遇到了类似的问题。在


Tags: 模型selfformtrueurlreturnmodelsdef
1条回答
网友
1楼 · 发布于 2024-10-04 11:25:55

要访问相关艺术家的主键,可以使用self.artist_id或{},而不是{}

 def get_absolute_url(self):
     return reverse('events:artistdetail', kwargs={'pk': self.artist_id})

但是,让ArtistCommentget_absolute_url返回不同模型的url可能不是一个好主意。另一种方法是重写视图中的get_success_url。在

^{pr2}$

请注意,CreateViewform_valid()方法将在调用super()时负责保存表单,因此您可以删除self.object = form.save()行。在

    def form_valid(self, form, **args):
        form.instance.author = self.request.user
        return super(ArtistCommentCreate, self).form_valid(form)

您可能需要使用^{}来阻止匿名用户创建评论。在

相关问题 更多 >