我有这些模型:
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>
最佳答案
如果您想在模型的 __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'
(主键)。这就是多对多字段的工作方式。
关于django 多对多以人类可读的形式显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43522102/