【问题标题】:Django - How to change dropdown form into tableDjango - 如何将下拉表单更改为表格
【发布时间】:2019-09-23 12:47:33
【问题描述】:

我正在 Django 中创建一个应用程序,但在从 Django 中的表单的下拉列表中迭代选项时遇到问题。我想知道是否有人可以提供帮助。

detail.html

{% for subject in subject_list %}
    <form action="" method="POST">
        {% csrf_token %}
        <table class='table table-borderless table-hover'>
                <tbody>
                <tr>
                    <td>{{ subject.subjectname }}
                        {% for field in form %}
                            {{ field.hidden }}
                        {% endfor %}
                    </td>
                </tr>
                </tbody>
        </table>
        <button type="submit" id="login-btn" class="btn">Create a new evaluation</button>
    </form>
{% endfor %}

forms.py

class CreateEvalForm(forms.ModelForm):
    subjectname = ModelChoiceField(queryset=Subject.objects, label='', empty_label="Choose subject..")

    class Meta:
        model = Evaluation
        fields = ['subjectname', ]

models.py

class Subject(models.Model):
    id = models.AutoField(primary_key=True)
    subjectname = models.CharField(max_length=255, help_text="Type the name of the subject.")
    slug = models.SlugField(max_length=200, unique=True)

理想情况下,我们希望它如下图所示: 注意图片为丹麦语,Fag = 主题,Opret ny evaluering = 创建新评估,Se evaluering = 查看评估

we want this

we don't want this

【问题讨论】:

  • 您希望“创建新评价”链接直接提交表单?还是应该只打开一个新页面来填写更多数据?
  • 这样提交表单有点奇怪……
  • 目前它适用于我们选择的任何主题都会创建对该主题的评估,所以是的,我们想在这里提交选择的主题。我们想要一个包含每个主题的行和一个按钮,就像常规下拉菜单一样,但采用表格形式。
  • 奇怪的方式,只是链接到预先填写主题ID的表单而不是实际提交和创建“空”评估会更容易。但是,如果这是您真正想要的,只需渲染一个 字段,该字段的名称为 subjectname 和相应主题的 id 的值,这样您的 POST 将包含主题为您的subject name,您的表单将起作用。
  • 我不明白你的意思?当我们将表单呈现到我们的模板中时,我们必须能够将主题值循环到一个表中?

标签: django django-models django-forms django-templates django-views


【解决方案1】:

我在 cmets 的帮助下解决了这个问题,将我的 for 循环和表格更改为:

<form action="" method="POST">
        {% csrf_token %}
        <table class='table table-borderless table-hover'>
                {% for option in form.fields.fagnavn.choices %}
                    {% if not forloop.first %}
                    <tbody>
                    <tr>
                        <td>{{ option.1 }}</td>
                        <td><button value="{{ option.0 }}" name="fagnavn">Opret ny evaluering</button></td>
                    </tr>
                    </tbody>
                    {% endif %}
                {% endfor %}
        </table>
    </form>

我使用form.fields.fagnavn.choices 访问了下拉列表中的选项,并使用{% if not forloop.first %} 的if 语句排除了“选择值”的默认值

差不多就是这样。

【讨论】:

    猜你喜欢
    • 2014-05-27
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 2020-03-29
    • 2019-05-17
    • 1970-01-01
    相关资源
    最近更新 更多