所以我有一个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,但是我遇到了类似的问题。在
要访问相关艺术家的主键,可以使用},而不是{}
self.artist_id
或{但是,让
^{pr2}$ArtistComment
的get_absolute_url
返回不同模型的url可能不是一个好主意。另一种方法是重写视图中的get_success_url
。在请注意,
CreateView
的form_valid()
方法将在调用super()
时负责保存表单,因此您可以删除self.object = form.save()
行。在您可能需要使用^{} 来阻止匿名用户创建评论。在
相关问题 更多 >
编程相关推荐