0

404在尝试发帖时遇到错误。但错误是event objects don't have get_absolute_url() methods

class Event(models.Model):
    title = models.CharField(max_length=200)
    description = models.TextField()
    date = models.DateTimeField()
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)
    avatar = models.ImageField(upload_to='avatars/events/', null=True, blank=True)
    tags = models.ManyToManyField(Tag, null=True, blank=True)

    class Meta:
        ordering = ['-date']

    def __unicode__(self):
        return self.title

    # I made this, but this doesn't work
    def get_absolute_url(self):
        return "/event/" + self.id

    # it returns : 
            Exception Type:  TypeError
            Exception Value: cannot concatenate 'str' and 'int' objects

我如何正确地完成这项工作?感谢您提前提供帮助。

4

3 回答 3

3

您需要使用格式字符串。

def get_absolute_url(self):
    return "/event/%d" % self.id
于 2012-07-30T20:54:43.150 回答
0

self.id 是一个数字,您正在尝试将其转换为 url 中的数字...如果您将其类型转换为所需的字符串,您仍然可以执行“+”操作...所以您必须这样做:

def get_absolute_url(self):
    return "/event/" + str(self.id)

它会起作用。通过这种方式,您可以进行 Unicode 转换等...通过指定您希望输出的确切类型。然而,其他构造似乎更快。但我更喜欢这个,因为这段代码中发生的事情在视觉上很清晰......

于 2012-07-31T17:19:24.927 回答
0

returnfrom的值get_absolute_url试图组合字符串和数字。

def get_absolute_url(self):
    return "/event/{0}".format(self.id)
于 2012-07-30T20:56:17.360 回答