【问题标题】:How to get value from choices in Django?如何从 Django 中的选择中获取价值?
【发布时间】:2019-01-08 09:02:02
【问题描述】:

如何从选择中获取值并将其显示在 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 %}

【问题讨论】:

  • 请添加您的 forms.py 代码。
  • 你也可以添加你的 HTML 模板吗?
  • 向问题添加代码
  • 如果你限制了这个模型中的语言选择,为什么你有一个Language 模型???要么你有一组固定的可用语言,然后你根本不需要这个模型(只需将Question.language 设置为带有LANGUAGES 的字符域),或者你希望可用语言是运行时可编辑的,然后你不需要'不想限制AvailableLanguage.lang
  • @brunodesthuilliers,感谢您提出这样的问题。我使用 Question 模型从 AvailableQuestion 模型的可用语言向站点添加问题。同时,AvailableQuestion 也用于国际化。我不知道我做得对不对。也许你的答案是正确的。我会尽力解决这个问题。

标签: django


【解决方案1】:

只需从您的 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()

【讨论】:

    【解决方案2】:

    使用

    {{ form.get_lang_display }}
    

    而不是

    {{ form.language.get_lang_display }}
    

    【讨论】:

      猜你喜欢
      • 2018-02-03
      • 2020-06-02
      • 2016-03-13
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-08
      • 2020-03-12
      相关资源
      最近更新 更多