如何从Django中的选择中获得价值?

时间:2019-01-08 09:02:03

标签: django

如何从选择中获取值并将其显示在Django中的表单上? 在这种情况下(如图所示),将显示 English 而不是 en

Picture of form

在模板中,我将表单打印为变量{{ form }}。我还尝试通过一个字段{{ form.language.get_lang_display }}输出,但是在这种情况下,根本不显示语言字段。

文件 models.py

class AvailableLanguage(models.Model):
    LANGUAGES = (
        ('en', 'English'),
        ('ru', 'Russian'),
    )
    lang = models.CharField(max_length=50, unique=True, choices=LANGUAGES)
    lang_code = models.CharField(max_length=5, unique=True)
    slug = models.SlugField()


class Question(models.Model):
    title = models.CharField(max_length=250)
    language = models.ForeignKey(AvailableLanguage, on_delete=models.CASCADE, default='')
    body = models.TextField()
    ...

文件 forms.py

class UserQuestion(forms.ModelForm):
    class Meta:
        model = Question
        fields = ('title', 'language', 'body')

文件 add_question.html

{% block content %}
    <form action="." method="post" enctype="multipart/form-data">
{#        {{ form }}#}
        {{ form.language.get_lang_display }} {#Not displayed#}
        {% csrf_token %}
        <input class="btn--primary" type="submit" value="{% trans 'Создать' %}">
    </form>
{% endblock %}

2 个答案:

答案 0 :(得分:4)

只需从您的 AvailableLanguage 模型返回一个str函数:

class AvailableLanguage(models.Model):
    LANGUAGES = (
        ('en', 'English'),
        ('ru', 'Russian'),
        )
    lang = models.CharField(max_length=50, unique=True, choices=LANGUAGES)
    lang_code = models.CharField(max_length=5, unique=True)
    slug = models.SlugField()

    def __str__(self):
        return self.get_lang_display()

答案 1 :(得分:0)

使用

{{ form.get_lang_display }}

代替

{{ form.language.get_lang_display }}