Django如何在中使用HTML标记属性视图.py?

2024-05-16 17:42:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个视图来更改布尔值并从中切换图像,我已经完成了,但是我需要在12个值之间迭代(asiento),我只能指向其中一个值这是我的Django代码。你知道吗

你知道吗型号.py地址:

class Asientos(models.Model):
asiento = models.CharField(max_length=2,primary_key=True)
status = models.BooleanField()
mesa = models.ForeignKey(Reserva)

def __str__(self):
    template = 'Asiento {0.asiento} de la mesa {0.mesa}'
    return template.format(self)

你知道吗视图.py地址:

def reservacion(request):
asientos = Asientos.objects.all()
if request.method == "POST":
    estatus = Asientos.objects.get(asiento=asientos)
    if estatus.status == True:
        estatus.status = False
    else:
        estatus.status = True
    estatus.save()

return render(request,"first_app/reservacion.html", {'asientos': asientos})

HTML格式:

<form enctype="multipart/form-data" action="{% url 'first_app:reservacion' %}"  method="post">
{% csrf_token %}
<div class="row">
{% for asiento in asientos %}
  {% if asiento.status %}
  <div class="col" ><input class="d-block w-100" value="" name="reservacion" type="image" src="{%static "/img/s6.jpg" %}" >{{asiento.asiento}}</div>
  {% else %}
  <div class="col" ><input class="d-block w-100" value="" name="reservacion" type="image" src="{%static "/img/sn6.jpg" %}" >{{asiento.asiento}}</div>
  {% endif %}
  {% if asiento.asiento == '6' %}
  </div>
  <div class="row">
    <div class="col">        </div>
    <div class="col">  <img src="{%static "/img/m1.jpg" %}" alt="">      </div>
    <div class="col">        </div>
  </div>
  <div class="row">
  {% endif %}

{% endfor %}
</div>
<input type="submit" name="" value="Reservar">
</form>

此代码仅更改第一个的值Asientos.objects.get获取(asiento=asientos)即使单击另一个对象,它也只会更改数据库中第一个对象的值。你知道吗

如何更改单击的对象的值?你知道吗


Tags: divtrueimgifmodelsrequeststatuscol
1条回答
网友
1楼 · 发布于 2024-05-16 17:42:07

实现这一点有多种方法。这可能是最基本的:

  1. reservacion()更改为:

    def reservacion(request, asiento_id=None):
        if asiento_id:
            estatus = Asientos.objects.get(pk=asiento_id)
            if estatus.status == True:
                estatus.status = False
            else:
                estatus.status = True
            estatus.save()
        asientos = Asientos.objects.all()
        return render(request,"first_app/reservacion.html", {'asientos ': asientos })
    
  2. 将url更改为以下内容:

    path('asiento/', views.reservacion, name='asientos'),
    path('asiento/change_status/<int:asiento_id>/', views.reservacion, name='reservacion_status')
    
  3. 将html更改为:

    <div class="row">
    {% for asiento in asientos %}
        {% if asiento.status == True %}
        <div class="col">
            <a href="{% url 'reservaction_status' asiento.pk %}"  class="d-block w-100">{% static '/img/s6.jpg' %}</a>
        </div>
        {% else %}
        <div class="col">
            <a href="{% url 'reservaction_status' asiento.pk %}"  class="d-block w-100">{% static '/img/sn6.jpg' %}</a>
        </div>
        {% endif %}
    {% endfor %}
    </div>
    

如果您想使用POST方法,那么一种相当基本的方法是使用Javascript/jQuery。你知道吗

  1. 将Reservation()更改为:

     def reservacion(request):
        asientos = Asientos.objects.all()
        if request.method == 'POST':
            asiento_id = request.POST.get('asiento', None)
            if asiento_id:
                estatus = Asientos.objects.get(pk=asiento_id)
                if estatus.status == True:
                    estatus.status = False
                else:
                    estatus.status = True
                estatus.save()
                return JsonResponse({'status': 'Success', 'msg': 'Status changed'})
        return render(request,"first_app/reservacion.html", {'asientos ': asientos })
    
  2. 你的网址可能是对的。应该是这样的:

    path('asiento/change_status/', views.reservacion, name='reservacion_status')
    
  3. 将html更改为:

    <div class="row">
    {% for asiento in asientos %}
        {% if asiento.status == True%}
        <div class="col"><input class="d-block w-100" type="image" src="{% static '/img/s6.jpg' %}" name="asiento" value="{{ asiento.pk }}"></div>
        {% else %}
        <div class="col"><input class="d-block w-100" type="image" src="{% static '/img/sn6.jpg' %}" name="asiento" value="{{ asiento.pk }}"></div>
        {% endif %}
    {% endfor %}
    </div>
    <script>
        $(document).ready(function() {
            $("[name=asiento]").on("click", function() {
                var formData = {"csrfmiddlewaretoken": "{{ csrf_token }}", "asiento": $(this).val()}
                $.ajax({
                    url: "{% url 'reservaction_status' %}",
                    method: "POST",
                    data: formData,
                    success: function(msg) {
                        if (msg.status == "Success") {
                            location.reload();
                        } else {
                            alert("Error changing status");
                        }
                    }
                })
            }
        });
    </script>
    

我想这是个好的开始。这段代码可以通过多种方式进行改进,但这不是问题所在。你知道吗

相关问题 更多 >