【问题标题】:Unable to loop form fields in django无法在 django 中循环表单字段
【发布时间】:2016-05-04 10:00:16
【问题描述】:

在models.py中,我创建了一个名为“category”的字符类型字段。用户输入类别名称后,它保存在数据库中,现在我想显示数据库中存储的所有类别名称。我创建四个类别名称。我可以在数据库中看到所有四个类别,但是在 UI 中显示它时,我看到的是 NONE 而不是类别名称。
视图.py,

def add_cat(request):
    form = CatForm(request.POST or None)
    context = {"form":form}

    if form.is_valid():
        instance = form.save(commit=False)
        category = form.cleaned_data.get("category")
        instance.category = category
        instance.save()
        messages.add_message(request, messages.INFO, 'Category Added')
    return render(request,"add-cat.html",context)

forms.py,

class CatForm(forms.ModelForm):
    class Meta:
        model = Add_cat
        fields = ['category']

我的模板文件,

{% extends "admin-menu.html" %}
{% block content %}
{% load staticfiles %}
<head>
 <link rel="stylesheet" href="{% static 'style.css' %}">
</head>
<h2 style="text-align: center;">Add Category</h2>
    <form method="POST">
        {% csrf_token %}
        <table align="center">
            {{form.as_table}}
        </table>
        <input type="submit" value="Add" style="margin-left: 48%;"/>
        <input type="reset" value="Cancel"/>    
    </form>

    {% if messages %}
    <ul class="messages" style="list-style-type: none;">
        {% for message in messages %}
        <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
        {% endfor %}
    </ul>
    {% endif %}

    &nbsp
    <form id="id1">
    {% for field in form %}
        <table align="center">
            <tr><th>Category Name</th></tr>   
            <tr><td>{{field.value}}</td></tr>
        </table>
    {% endfor %}
    </form>
{% endblock %}

【问题讨论】:

  • 我不太明白你在这里做什么。您使用form.as_table 显示表单一次,然后通过循环并执行field.value 再次显示。但是这些字段没有值;如果你想显示已经保存在数据库中的内容,你应该查询模型,而不是表单。
  • 首先我创建了一个用于创建类别的输入框,然后在第二个表中我试图在浏览器中显示它,我得到的是 None 而不是字段值。
  • 因为就像我说的,你需要查询模型,不再显示表单字段。

标签: python django django-forms django-templates


【解决方案1】:

这样试试

def add_cat(request):
    form = CatForm(request.POST or None)
    catagories = <model>.objects.all()
    context = {"form":form, 'categories':categories}

    if form.is_valid():
        instance = form.save(commit=False)
        category = form.cleaned_data.get("category")
        instance.category = category
        instance.save()
        messages.add_message(request, messages.INFO, 'Category Added')
    return render(request,"add-cat.html",context)

在模板中

{% for category in categories %}
    <table align="center">
        <tr><th>Category Name</th></tr>   
        <tr><td>{{ category }}</td></tr>
    </table>
{% endfor %}

【讨论】:

  • 仅当请求方法为 POST(仅当我添加新项目时)才显示类别,但是当我只是浏览不同的菜单项(GET 请求)时,我得到了空表。跨度>
  • 在 context catagories = .objects.all() context.update({'categories':categories}) 之后添加以下两行我也会更新答案
猜你喜欢
  • 2019-07-21
  • 2010-09-22
  • 2018-06-28
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
相关资源
最近更新 更多