2016-01-21 58 views
0

我正在使用python 2.7 & django 1.7。django - 强制为Unicode:需要字符串或缓冲区,找不到类型

我有一个模型,我想返回一个字段在模板中使用,但该字段可能为空,这意味着当我尝试将条件语句放入返回字段时,我收到此错误。

这里是我的代码:

class ContactDetails(FillableModelWithLanguageVersion): 
    user = models.ForeignKey(User) 
    contact_details_phone = models.CharField(null=True, blank=True, max_length=30) 
    contact_details_mobile_phone = models.CharField(null=True, blank=True, max_length=30) 
    contact_details_email_address = models.EmailField(null=True, blank=True, max_length=250) 
    contact_details_linkedin_address = models.URLField(null=True, blank=True, max_length=250) 
    contact_details_facebook_address = models.URLField(null=True, blank=True, max_length=250) 
    contact_details_twitter_address = models.URLField(null=True, blank=True, max_length=250) 
    contact_details_timestamp_added = models.DateTimeField(auto_now_add=True, auto_now=False) 
    contact_details_timestamp_updated = models.DateTimeField(auto_now=True, auto_now_add=False) 

    def __unicode__(self): 
     return 
     if self.contact_details_mobile_phone: 
      truncatechars(self.contact_details_mobile_phone, 30) 
     elif self.contact_details_phone: 
      truncatechars(self.contact_details_phone, 30) 
     ...... 

当我使用高于如果elif的条件,我收到以下错误:

胁迫到Unicode:需要字符串或缓冲区,NoneType发现

我已阅读此post并应用建议的修复程序,但这不适用于我。这里是我尝试过的一个尝试的示例

def __unicode__(self): 
    return 
    if self.contact_details_mobile_phone: 
     unicode(truncatechars(self.contact_details_mobile_phone, 30)) or u'' 
    elif self.contact_details_phone: 
     unicode(truncatechars(self.contact_details_phone, 30)) or u'' 
    ..... 

我继续得到相同的错误消息。我检查了数据,数据很好。我想知道如果我滥用if elif条件语法?

有没有人有我可以尝试的建议?

+1

您的'__unicode__'方法立即返回None,您需要在if/else子句之后移动return语句。 –

+0

facepalm!是的,这是令人尴尬的。感谢您指出我的愚蠢错误。我很专注于我忽略了回报的情况! – user1261774

回答

3

您只是通过return从您的功能返回None。你的函数刚刚在你的if else代码块执行之前返回(可能你是一个ruby开发者或者其他东西,但python不能这样工作)。

+0

谢谢。我不敢相信这个错误有多愚蠢!它让别人看到它。 – user1261774

相关问题