这个“返回unicode(self.creator)+” - “+ self.title”在Django中做了什么?

时间:2012-09-07 04:24:38

标签: python django forum

我正在关注使用Django / Python创建论坛的lightbird教程。以下是创建Thread模型的代码。

class Thread(models.Model):
    title = models.CharField(max_length=100)
    created = models.DateTimeField(auto_now_add=True)
    creator = models.ForeignKey(User, blank=True, null=True)
    modified = models.DateTimeField(auto_now=True)
    forum = models.ForeignKey(Forum)

    def __unicode__(self):
        return unicode(self.creator) + " - " + self.title

Post模型:

class Post(models.Model):
    title = models.CharField(max_length=60)
    created = models.DateTimeField(auto_now_add=True)
    creator = models.ForeignKey(User, blank=True, null=True)
    thread = models.ForeignKey(Thread)
    body = models.TextField(max_length=10000)

    def __unicode__(self):
        return u"%s - %s - %s" % (self.creator, self.thread, self.title)

    def short(self):
        return u"%s - %s\n%s" % (self.creator, self.title, self.created.strftime("%b %d, %I:%M %p"))
    short.allow_tags = True

我很难理解 unicode 功能后的代码!我一直在使用 unicode ,同时以非常简单的形式创建模型:

class Post(models.Model):
    title = models.CharField(max_length=100)

    def __unicode__(self):
        return self.title

我理解这一点,但不是上面模型中的代码。有人可以向我解释一下。谢谢!

1 个答案:

答案 0 :(得分:5)

 unicode(self.creator) +\ #will call the __unicode__ method of the User class
 ' - ' +\ # will add a dash
 self.title #will add the title which is a string

然后是第二个

  "%s"%some_var #will convert some_var to a string (call __str__ usually...may fall back on __unicode__ or something)

所以

return u"%s - %s\n%s" % (self.creator, self.title, self.created.strftime("%b %d, %I:%M %p"))

会在创建者的用户类上调用__str__(或者__unicode__)函数

然后它添加一个破折号和标题

\n是一个结束行

strftime会将时间戳转换为英文“MonthAbbrv。Day,24Hr:Minutes”