如何在Django模型实例中连接2个属性来创建名称?

如何在Django模型实例中连接2个属性来创建名称?,django,django-models,Django,Django Models,我有一个模型: class Subject(models.Model): level = models.CharField(choices=LEVEL_CHOICES, max_length=2) subject_name = models.CharField(max_length=50) teacher_name = models.ForeignKey(Teacher, on_delete=models.CASCADE) total_seats = models

我有一个模型:

class Subject(models.Model):
    level = models.CharField(choices=LEVEL_CHOICES, max_length=2)
    subject_name = models.CharField(max_length=50)
    teacher_name = models.ForeignKey(Teacher, on_delete=models.CASCADE)
    total_seats = models.IntegerField()
    subject_details = models.CharField(max_length=100)
    subject_img = models.ImageField()
我希望将每个实例显示为级别,然后显示主题名称。例如,如果实例的
级别为“高级”且
主题名称为“物理”,我希望实例显示为“高级物理”

我尝试过使用str方法,但它显示
subject\u name
未定义:

def __str__(self):
        return self.level+ ''+ subject_name
编辑:

我忘了提到
level
字段接受选项,因此:

LEVEL_CHOICES = (
    ('09', 'Class 9 O level'),
    ('10', 'Class 10 O level'),
    ('11', 'AS level'),
    ('12', 'A2 level'),
)

如何显示人类可见的数据?例如,右侧的
级别

是在
self
对象上定义的属性,因此您可以通过以下方式实现:

    def __str__(self):
        return self.level + '' + self.subject_name
如果要使用显示值选择
level
,可以调用
get\u level\u display
方法:

    def __str__(self):
        return self.get_level_display() + '' + self.subject_name
def __str__(self):
        return '{0} {1}'.format(self.get_level_display(), self.subject_name)
def\uuuu str\uuuuuu(自):

返回self.get_level_display()

def __str__(self):
        return self.level + ' ' + self.subject_name
或通过Python3格式化:

def __str__(self):
        return '{0} {1}'.format(self.level, self.subject_name)
要获得人类可读的值,只需使用
.get\u FOO\u display()
方法:

    def __str__(self):
        return self.get_level_display() + '' + self.subject_name
def __str__(self):
        return '{0} {1}'.format(self.get_level_display(), self.subject_name)
Model.get_FOO_display():


我忘了提到选择的水平。请检查编辑@IsStream编辑了我的答案,以展示如何做到这一点。我忘了提到字段级别包含选项。请检查编辑