django多对多在形式上表现出人类可读性

时间:2017-04-20 14:16:31

标签: django many-to-many

我有这些模特:

CURSES=(('python','Python'),('django','Django'),...)
class Asig(models.Model):
    ...
    name = models.CharField(max_length=100, choices=CURSES)

class Profesor(AbstractUser):
    ...
    asigs = models.ManyToManyField(Asig)

然后,当我使用ModelForm渲染表单时,多对多字段显示自己的'python'字符串而不是'Python',当我看起来渲染的html编码时,多选项选项看起来像:

<option value='1'>python</option>

而不是

<option value='python'>Python</option> 

1 个答案:

答案 0 :(得分:3)

如果您想在模型的__str__方法中使用值'Python',那么您应该使用self.get_name_display()而不是self.name

class Asig(models.Model):
    ...
    name = models.CharField(max_length=100, choices=CURSES)

    def __str__(self):  
        # use @python_2_unicode_compatible or define __unicode__ if using Python 2
        return self.get_name_display()

您无法轻松更改多对多字段以使用value='python'而非value='1'(主键)。这就是多对多领域的工作方式。