如何从Django中的_unicode__;()函数查询数据差异

如何从Django中的_unicode__;()函数查询数据差异,django,orm,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 __uni

我有一个模型:

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个字段吗?

首先,get\u all\u菜单方法应该是一个模型管理器方法,而不是像您这样的模型方法,因为它是一个作用于整个表的函数,而不是单个行/实例:

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

get\u all\u菜单
放入管理器似乎没有任何意义,因为它与管理器的
all()
方法相同。我怀疑(虽然OP当然没有告诉我们)他/她想在admin
列表显示中使用它,当然只是看到unicode表示。同意,我只是指出了行级操作与表级操作之间的区别。太好了!我得到了它!非常感谢。