Django的model中使用外键,但在页面上显示的是xxx_object?

在Django中定义了如下A,B两个模型:

class A:
      name=models.CharField(max_length=15)
      def  __unicode__(self):
             return self.name

class B:
      name=models.CharField(max_length=15)
      f=models.ForeignKey(A,on_delete=models.DO_NOTHING)

      def  __unicode__(self):
            return self.name

注:我在测试环境中使用的是python2.7,一切操作做完之后,部署到云服务器上后,就在后台管理系统中看到B的属性一栏中f显示为A_Object,并没有显示A的属性——name的值。究其缘由,发现我的云服务器上用的是python3.6,在这里要将__unicode__()方法替换成__str__()方法才行.

class A:
      name=models.CharField(max_length=15)
      def  __str__(self):
             return self.name

class B:
      name=models.CharField(max_length=15)
      f=models.ForeignKey(A,on_delete=models.DO_NOTHING)

      def  __str__(self):
            return self.name

当然,如果使用的版本是python3.x,为了更好地兼容python2.x,可以使用@python_2_unicode_compatible装饰器来使python2.x想python3.x一样处理Unicode字符。

from django.utils.encoding import python_2_unicode_compatible


@python_2_unicode_compatible
class A:
      name=models.CharField(max_length=15)
      def  __str__(self):
             return self.name


@python_2_unicode_compatible
class B:
      name=models.CharField(max_length=15)
      f=models.ForeignKey(A,on_delete=models.DO_NOTHING)

      def  __str__(self):
            return self.name

 

你可能感兴趣的:(Django,python)