如果我需要这样的 url:“/article_url#comment-id”,为 Comment 创建 get_absolute_url 函数的最佳方法是什么?
我的模型:
class Article(models.Model):
url = models.CharField()
def get_absolute_url(self):
return reverse('article-detail', args=[self.url])
class Comment(models.Model):
related_article = models.ForeignKey(Article)
我的变种:
1) 非常简单,但在这种情况下,django 将获取文章的所有字段,对于主页上的“最新 10 条评论”之类的视图来说,这很糟糕:
u = self.related_article.get_absolute_url()
return ''.join([u, '#comment-', str(self.pk)])
2) 在这种情况下,函数将独立于 Article 类更改,但 django 将在第一个查询中获取 pk 并在第二个查询中获取 url:
u = Article.objects.filter(pk=self.related_article_id) \
.only('pk') \
.get() \
.get_absolute_url()
return ''.join([u, '#comment-', str(self.pk)])
3) 在这种情况下,字段 'url' 是硬编码的,但 django 将在一个查询中获取 pk 和 url:
u = Article.objects.filter(pk=self.related_article_id) \
.only('url') \
.get() \
.get_absolute_url()
return ''.join([u, '#comment-', str(self.pk)])