2012-07-30 49 views
0

嘗試發佈時,出現404錯誤。但錯誤是event objects don't have get_absolute_url() methods創建get_absolute_url()

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 

我該如何正確地完成這項工作?感謝您提前幫忙。

+0

你能發佈與該模型相關的urls.py文件嗎? – 2012-07-30 20:59:38

回答

3

您需要使用格式字符串。

def get_absolute_url(self): 
    return "/event/%d" % self.id 
0

return值從get_absolute_url試圖將一個字符串和數字相結合。

def get_absolute_url(self): 
    return "/event/{0}".format(self.id) 
0

self.id是一個數字,你想將它轉換成數網址... 你仍然可以做「+」操作,如果你把它轉換的類型,以所需的字符串... 所以你必須這樣做:

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

它會工作。這樣你可以做Unicode轉換,等等......通過指定你想要輸出的確切類型。然而其他建築似乎更快。但我更喜歡這一個,因爲在這段代碼中發生了什麼視覺清晰...