【问题标题】:django - coercing to Unicode: need string or buffer, NoneType found [duplicate]django - 强制转换为 Unicode:需要字符串或缓冲区,找到 NoneType [重复]
【发布时间】:2016-04-28 08:49:42
【问题描述】:

我正在使用 python 2.7 和 django 1.7。

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

这是我的代码:

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)
        ......

当我应用上面的 if elif 条件时,我收到以下错误:

强制转换为 Unicode:需要字符串或缓冲区,找到无类型

我已阅读此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 条件语法?

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

【问题讨论】:

  • 您的__unicode__ 方法立即返回 None,您需要将 return 语句移到 if/else 子句之后。
  • 捂脸!是的,这很尴尬。感谢您指出我的愚蠢错误。我太专注于忽略返回的条件!

标签: python django unicode django-models django-templates


【解决方案1】:

您通过执行return 从您的函数返回了None。您的函数刚刚在您的 if else 代码块执行之前返回(也许您是 ruby​​ 开发人员或其他人,但 python 不能那样工作)。

【讨论】:

  • 谢谢。我不敢相信那个错误是多么愚蠢!别人看到了。
猜你喜欢
  • 2012-06-06
  • 2014-12-21
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 2011-07-17
  • 2019-04-02
  • 2013-04-26
相关资源
最近更新 更多