zoukankan      html  css  js  c++  java
  • 关于django模型里面的__str__和__unicode__

    python3    django模型里面 使用 __str__  如果使用__unicode__是无效的

    简而言之,就是__str__和__unicode__都是为了再管理站点中加载这个表时想显示什么属性,当然一般都是显示一个name,大体来讲是通用的。下面是抄的csdn上面的一篇文章。

    str()是Python的一个“魔幻”方法,这个方法定义了当object调用str()时应该返回的值。Django在许多地方使用str(obj)(或者相关方法,unicode(obj)——见下文),比如说在Django管理站点加载一个对象时显示它的值或者作为对象的显示值插入模板中。因此,我们应该总是返回一个友好的,用户可读的字符串作为对象的str。尽管这不是必须的,但还是建议这么做。例如:

    class Person(models.Model): 
    first_name = models.CharField(max_length=50) 
    last_name = models.CharField(max_length=50)

    def __str__(self):
        # Note use of django.utils.encoding.smart_str() here because
        # first_name and last_name will be unicode strings.
        return smart_str('%s %s' % (self.first_name, self.last_name)

    unicode()方法是在一个对象上调用unicode()时被调用的。因为Django的数据库后端会返回Unicode字符串给model属性,所以我们通常会给自己的model写一个unicode()方法。前面的例子也可以更简单地写成:

    class Person(models.Model): 
    first_name = models.CharField(max_length=50) 
    last_name = models.CharField(max_length=50)

     def __unicode__(self):  
         return u'%s %s' % (self.first_name, self.last_name)

    如果定义了unicode()方法但是没有定义str()方法,Django会自动提供一个str()方法调用unicode()方法,然后把结果转换为UTF-8编码的字符串对象。在实际开发中,建议:只定义unicode()方法,需要的话让Django来处理字符串对象的转换。

  • 相关阅读:
    【Android】12.3 在当前Activity中获取另一个Activity的返回值
    【Android】12.2 利用Intent启动和关闭Activity
    【Android】12.1 Intent基本概念
    【Android】12.0 第12章 Intent及其过滤器—本章示例主界面
    【Android】11.6 Fragments基本用法示例
    【Android】11.5 创建和管理Fragments
    【Android】11.4 Fragment及其生命周期
    【Android】11.3 屏幕旋转和场景变换过程中GridView的呈现
    HTML标记之Form表单
    HTML标记之a标签
  • 原文地址:https://www.cnblogs.com/cfpl/p/10096193.html
Copyright © 2011-2022 走看看