如何在Django中查询__unicode __()函数的数据差异

时间:2011-11-06 05:58:38

标签: django orm

我有一个模特:

class Menu(models.Model):
     menu_id=models.CharField(max_length=30)
     name_vi=models.CharField(max_length=80)
     name_en=models.CharField(max_length=80)

     def get_all_menu(self):
          return Menu.objects.all()

     def __unicode__(self):
          return self.name_vi

     class Admin:pass

当调用get_all_menu时,我希望它返回一个包含3个字段的菜单模型的二维数组:menu_id,menu_vi,menu_en。但它只返回name_vi,与 unicode 函数相同。

在这种情况下,我可以查询完整的3个字段吗?

1 个答案:

答案 0 :(得分:0)

首先, get_all_menu 方法应该是模型管理器方法而不是模型方法,就像你拥有它一样,因为它是一个作用于整个表的函数,而不是单个行/实例: / p>

class MenuManager(models.Manager):
    def get_all_menu(self):
      return self.objects.all()

class Menu(models.Model):
    objects = MenuManager()

所以你现在可以使用它来获取表格的所有行:

Menu.objects.get_all_menu()

其次 unicode 功能与查询无关。它只是一个帮助您在打印时显示对象的敏感名称的功能。

第三,为什么要查询数据库时返回2d数组?当您执行查询时,您将获得3个对象,因此您可以引用其所有属性/列:

menus = Menu.objects.get_all_menus()
for menu in menus:
    print menu.menu_id
    print menu.name_vi
    print menu.name_en