【问题标题】:Modifying a dropdown menu option in a form Django在 Django 表单中修改下拉菜单选项
【发布时间】:2021-08-25 02:48:26
【问题描述】:

我有一个下拉菜单,我用它来填写表单上的字段,但是,由于我刚开始使用 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>

第一种形式的图像

Dropdown menu on the first 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>

以及该视图的网页:

Dropdown menu on the second form

如何使第二个表单上的下拉菜单像第一个表单上的那样工作?

【问题讨论】:

    标签: html jquery django templates


    【解决方案1】:

    #chnage 你的视图如下

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

    #如下更改您的 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>
    

    【讨论】:

    • 它用于显示菜单,但没有将其保存在表单上,​​我编辑了帖子以添加将更改保存在第二个表单中的视图。
    • 已经包含了,我编辑了原帖并在上面加上了编辑标签,它超过了第二个模板的代码
    猜你喜欢
    • 2022-01-20
    • 2018-05-26
    • 2016-01-06
    • 2020-03-29
    • 2017-05-29
    • 2023-03-31
    • 1970-01-01
    • 2020-04-12
    • 2011-03-08
    相关资源
    最近更新 更多