修改表单中的下拉菜单选项 Django

Modifying a dropdown menu option in a form Django

提问人:Davos Seaworth 提问时间:6/8/2021 最后编辑:Davos Seaworth 更新时间:6/8/2021 访问量:186

问:

我有一个下拉菜单,我用它来填充表单上的字段,但是,由于我刚刚开始使用 django 和 html,我正在使用另一个表单来编辑和更新上一个表单的数据。但是我无法使下拉菜单在第二种形式上工作。

模型:

class Orden(models.Model):
    STATUS = (
        ('En espera', 'En espera'),
        ('En proceso', 'En proceso'),
        ('Terminado', 'Terminado'),
        ('Entregado', 'Entregado'),
        )
    num_orden = models.CharField(max_length=20, default='')
    fechain = models.CharField(max_length=30, default='')
    fechaout = models.CharField(max_length=30, default='')
    instrumento = models.CharField(max_length=30, default='')
    marca = models.CharField(max_length=20)
    referencia = models.CharField(max_length=30, default='')
    serial = models.CharField(max_length=15, default='')
    encargado = models.CharField(max_length=50, default='')
    abono = models.CharField(max_length=15, default='')
    procesos = models.TextField(default='')
    estado = models.CharField(max_length=50, null=True, choices=STATUS) # <--- This one
    client = models.ForeignKey(Cliente, on_delete=models.CASCADE, default='', related_name="client")

与第一种形式相关的视图:

def ordenfill(request, client_id):
    if request.method == 'POST':
        orden = ordenForm(request.POST)
        if orden.is_valid():

            orden.instance.client_id = client_id
            init = orden.save()
            return redirect('ordenview', id=init.id)
    else:
        orden = ordenForm()

    client = Cliente.objects.get(id=client_id)

    context = {
        'orden': orden,
        'client': client,
    }

    return render(request, 'ordenfill.html', context)

与该下拉菜单关联的模板部件:

<form method="POST" class="post-form" action="{% url 'ordenfill' client.id %}">
     {% csrf_token %}
     <div class="container">
        <br>
         .
         .
         .
         <div class="form-group row">
            <label class="col-sm-2 col-form-label">Estado</label>
            <div class="col-sm-4">
                {{orden.estado}}
            </div>
        </div>
    </div>
</form>

第一种形式的图像

第一个窗体上的下拉菜单

与第二种形式相关的视图:

def ordenupd(request, id):
    orden = Orden.objects.get(id=id)
    status = Orden.STATUS
    context = {
        'orden': orden,
        'status': status,
    }

    return render(request, "ordenupd.html", context)

编辑:在第二种窗体中保存更改的视图

def ordenmod(request, id):
    orden = get_object_or_404(Orden, id=id)

    if request.method == 'GET':
        orden = ordenForm(instance=orden)
        return redirect("ordenview", id=id)

    else:

        orden = ordenForm(request.POST, instance=orden)
        print(orden.errors)
        if orden.is_valid():
            orden.save()
            return redirect("ordenview", id=id)
        else:
            orden = clienteForm()
            return redirect("ordenview", id=id)

与该视图的下拉菜单关联的模板部件:

<form method="POST" class="post-form" action="/ordenmod/{{orden.id}}">
     <input type="hidden" name="id" id="id" required maxlength="20" value="{{orden.id}}"/>
           {% csrf_token %}
           <div class="container">
               <br>
               <div class="form-group row">
                    <label class="col-sm-2 col-form-label">Estado</label>
                    <div class="col-sm-4">
                        <select name="select_path" id="select_path">
                            <option value="{{orden.estado}}">{{orden.estado}}</option>
                            {% for items in status %}
                                <option value ="{{orden.estado}}">{{orden.estado}}</option>
                            {% endfor %}
                        </select>
                    </div>
                </div>
            </div>
</form>

以及该视图的网页:

第二个表单上的下拉菜单

我怎样才能使第二个表单上的下拉菜单像第一个表单上的下拉菜单一样工作?

HTML jQuery Django 模板

评论


答:

0赞 Kiran 6/8/2021 #1

#chnage 您的观点如下

from .models import STATUS 
def ordenupd(request, id):
    status = STATUS
    context = {
        'status': status,
    }
  return render(request, "ordenupd.html", context)

#change HTML 表单模板,如下所示

<form method="POST" class="post-form" action="/ordenmod/{{orden.id}}">
         <input type="hidden" name="id" id="id" required maxlength="20" value="{{orden.id}}"/>
               {% csrf_token %}
               <div class="container">
                   <br>
                   <div class="form-group row">
                        <label class="col-sm-2 col-form-label">Estado</label>
                        <div class="col-sm-4">
                            <select name="select_path" id="select_path">
                                
                                {% for items in status %}
                                    <option value ="{{item.1}}">{{item.1}}</option>
                                {% endfor %}
                            </select>
                        </div>
                    </div>
                </div>
    </form>

评论

0赞 Davos Seaworth 6/8/2021
它适用于显示菜单,但不会将其保存在表单上,我编辑了帖子以添加将更改保存在第二种表单中的视图。
0赞 Davos Seaworth 6/8/2021
已经包含了它,我编辑了原始帖子并在其上放置了编辑标签,它覆盖了第二个模板的代码