如何在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编辑了我的答案,以展示如何做到这一点。我忘了提到字段级别包含选项。请检查编辑