我有这些模特:
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>
答案 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'
(主键)。这就是多对多领域的工作方式。