2017-04-20 65 views
3

我有这些模型:Django的许多一对多显示人类可读的形式

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的,另外,当我看呈现的HTML编码的多选选项的样子:

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

,而不是

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

回答

2

如果你想使用模型的__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'(主键)。这正是多对多领域的工作方式。

+0

get_name_display()它是关于字段名称?如果我的字段名称是花,那么可能是get_flowers_display()? –

+1

这是正确的。有关更多信息,请参见['get_FOO_display()'](https://docs.djangoproject.com/en/1.11/ref/models/instances/#django.db.models.Model.get_FOO_display)上的文档。 – Alasdair