Python Django查询错误:无法转换'方法'隐含地反对str

时间:2015-08-11 09:05:06

标签: python django

我有以下Django模型:

class City(models.Model):
    country = models.ForeignKey(Country)
    city_icon = models.ImageField(null=True, blank=True)
    city_background = models.ImageField(null=True, blank=True)
    city_render_separate = models.BooleanField(default=False)

    def __str__(self):
        return 'City: ' + self.get_city_en

    def get_city_en(self):
        searched_city = models.CityLanguage.objects.filter(city_language__exact='EN', city__exact=self)
        if not searched_city:
            return 'Something went wrong...'
        else:
            return searched_city[0].city_name


class CityLanguage(models.Model):
    city = models.ForeignKey(City)
    city_language = models.CharField(max_length=2,
                                     choices=LANGUAGE_CHOICES,
                                     default=ENGLISH)
    city_name = models.CharField(max_length=100)
    city_description = models.TextField(blank=True)

基本上是2个表。一个用于城市实体"和其他所有翻译。

每当我使用Django管理界面添加新城市时,我都会收到以下错误:

无法转换'方法'隐含地反对str

它引用了以下代码行:

return 'City: ' + self.get_city_en

我猜我的错误在于我正在尝试运行的查询。

我的目标:

因为" City" table不存储任何有助于通过名称识别城市的字符串,我想返回"英语" CityLanguage表中城市名称的变体。

有人能帮我辨别我做错了什么吗?

感谢。

2 个答案:

答案 0 :(得分:2)

def __str__(self):
    return 'City: ' + self.get_city_en()

您需要函数调用的结果。你正在做的是尝试将函数与字符串连接起来。考虑:

def foo():
  return "test"

print foo    # <function foo at 0x1052b0aa0>
print foo()  # "Test"

答案 1 :(得分:0)

感谢@Kit Sunde得到了答案。有2个错误。更正了以下代码:

return 'City: ' + self.get_city_en()


searched_city = CityLanguage.objects.filter(city_language__exact='EN', city__exact=self)

我试图通过指定不正确的models.CityLanguage来引用CityLanguage表。应该只是CityLanguage。