【问题标题】:Django get_absolute_url with ForeignKey parameter not working带有 ForeignKey 参数的 Django get_absolute_url 不起作用
【发布时间】:2011-04-16 17:28:50
【问题描述】:

我正在使用 get_absolute_url 方法获取动态查询的 url,但是当显示链接时,它只显示 get_absolute_url 方法中的第一个参数而不是第二个参数。只有当我使用模型的 ForeignKey 作为第一个参数时,它才会这样做。下面是代码。

class Topic(models.Model):
topic_id = models.AutoField(primary_key=True)
forum_id = models.ForeignKey(Forum)
topic_title = models.CharField(max_length=400)
topic_date_time = models.DateTimeField(auto_now_add=True)
topic_user_id = models.IntegerField()
topic_views = models.IntegerField(default=0)
topic_replies = models.IntegerField(default=0)
topic_is_locked = models.BooleanField(default=False)
topic_is_sticky = models.BooleanField(default=False)

def __unicode__(self):
    return '%s' % _(u'self.topic_title')

def get_absolute_url(self):
    **return '/forums/%i/%i/' % (self.forum_id, self.topic_id)**

我该如何解决这个问题?谢谢!

【问题讨论】:

  • topic_instance.get_absolute_url()返回的字符串到底是什么?
  • 能否也显示 urls.py 的相应部分?虽然使用永久链接装饰器来反转您的网址可能会更好(docs.djangoproject.com/en/dev/ref/models/instances/…
  • 我找到了我的问题的答案,但肯定也会对此进行调查。谢谢!

标签: python django


【解决方案1】:
def get_absolute_url(self):
    return '/forums/%s/%s/' % (str(self.forum_id.pk), self.topic_id)

编辑:jerzyk 评论提到了这些其他点:

  1. 使用带有 get_absolute_url 的 @permalink 并使用视图和参数反转 url,这样您就不必对 url 进行硬编码。

  2. 使用 _id 而不是 .pk

    def get_absolute_url(self):
        return '/forums/%s/%s/' % (self.forum_id_id, self.topic_id)
    

【讨论】:

  • 但这会在每次执行时生成额外的数据库查询,更好的 ir 将是:'/forums/%i/%i/' % (self.forum_id_id, self.topic_id),另一个故事是这不是很好的方法,更好的是使用永久链接装饰器docs.djangoproject.com/en/1.3/ref/models/instances/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 2013-04-06
  • 2014-09-16
  • 2021-06-21
相关资源
最近更新 更多