2017-04-20 72 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