【问题标题】:Django Model's Return Value [closed]Django 模型的返回值 [关闭]
【发布时间】:2015-12-21 18:24:12
【问题描述】:

我有一个模型:

class student(models.Model):
    First_Name = models.CharField(max_length=100,null=True)
    Last_Name = models.CharField(max_length=100,null=True)
    STNO = models.CharField(max_length=10,null=True)

但是在我的程序和管理面板中,我看到“学生对象”而不是姓名、身份证等

我尝试了以下代码但仍然无法正常工作

def __str__(self):
     return self.First_Name

def __str__(self):
     return "{0} {1}".format(self.First_Name, self.Last_Name)

【问题讨论】:

  • 学生的班级名称不应该大写,字段名应该小写,这是一个通用约定。
  • 如果你使用python 2,你需要定义__unicode__而不是__str__
  • 什么??? :|如果一个是大写而另一个是小写程序不起作用@PrashantShukla
  • 这不是一个真正的答案,但在我在你的last question 中建议的the doc 的链接中,你也可以用@python_2_unicode_compatible 来装饰你的班级。 (另外,尝试设置 __repr__ 方法代替/以及 __str__ 方法)
  • 就 Unicode 问题而言,它通常可以工作,但如果您仍然面临同样的问题,请使用 django.utils.encoding import smart_unicodereturn smart_unicode( self.name)

标签: python django


【解决方案1】:

我认为您正在使用Python 2x,所以您应该尝试__unicode__

class Student(models.Model):
   first_name = models.CharField(max_length=100,null=True)
   last_name = models.CharField(max_length=100,null=True)
   stno = models.CharField(max_length=10,null=True)

   def __unicode__(self):
      return "{0} {1}".format(self.first_name, self.last_name)

顺便说一句,字段名应该全部小写,使用下划线而不是驼峰式。

并且类名通常应该使用 CapWords 约定。

【讨论】:

  • 谢谢你,但我还是有问题
  • @ArashHatami 应该可以工作。你的例外是什么?
【解决方案2】:

尝试将您的代码更改为以下代码:

class Student(models.Model):
    first_name = models.CharField(max_length=100,null=True)
    last_name = models.CharField(max_length=100,null=True)
    stno = models.CharField(max_length=10,null=True)

    def __unicode__(self): 
      return self.first_name

然后您必须对数据库进行更改:python manage.py migratepython manage.py makemigration 并重新启动服务器。希望对你有帮助

【讨论】:

  • 我为什么要把类名改成大写???和小写的名字
  • 它是一个 Pep8 编码标准,它不是必需的,它正是你发现的大多数 python 代码将使用的。
  • 感谢您提供信息,但我有一个包含许多代码行的大程序....如果我更改其中一个,后来我遇到了麻烦。
  • 好的 .... 我修复了 PEP0008 编码标准 ...但仍然无法正常工作
【解决方案3】:

您可能想要定义 unicode 函数。此外,如果 first_name 和 last_name 可以为空,这并不是真正的保存方法。 我的建议是:

class Student(models.Model):
   first_name = models.CharField(max_length=100,null=True)
   fast_name = models.CharField(max_length=100,null=True)
   stno = models.CharField(max_length=10,null=True)

   def __unicode__(self):
      first_name = self.first_name if self.first_name else u'John'
      last_name = self.last_name if self.last_name else u'Doe'
      return first_name + ' ' + last_name

【讨论】:

  • 对不起,jsut 更新了我的答案
  • 它应该;)。你重启你的服务器了吗?删除了 *.pyc 文件?
  • 你是否尝试调试到 unicode 函数,如果它甚至跳转到那个函数?
  • 如果您使用的是 Pycharm(我会推荐),您可以在此处放置一个断点并启动调试器
  • 那么就在你的函数中放一个打印或日志语句,看看它是否会在控制台中弹出
【解决方案4】:

感谢大家的热心回答

我尝试了以下方法,终于找到了答案:

1- 修复 PEP0008 编码标准

2- 将 STR 更改为 str

3- 删除数据库并创建新的

4- 重启服务器

我也试过 "unicode" - "repr" - "smart_unicode" 但我认为原始的 str 对于这样的例子来说是最好的选择

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-21
    • 2012-05-10
    • 1970-01-01
    • 2010-10-07
    • 2021-09-28
    • 2013-06-20
    • 1970-01-01
    • 2016-06-16
    相关资源
    最近更新 更多