Django how to use a HTML tag attribute in views.py?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
I'm trying to create a view that change a boolean and switch images from it, I already done it but I need to iterate between 12 values (asiento) and i only can point to one of them this is my Django code.
models.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)
views.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>
this code change the value only of the first Asientos.objects.get(asiento=asientos) even when i click another one it just change the value of the first object in my DB.
How can i change the value of the object that i click?
python django
add a comment |
I'm trying to create a view that change a boolean and switch images from it, I already done it but I need to iterate between 12 values (asiento) and i only can point to one of them this is my Django code.
models.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)
views.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>
this code change the value only of the first Asientos.objects.get(asiento=asientos) even when i click another one it just change the value of the first object in my DB.
How can i change the value of the object that i click?
python django
1
Looks that you need some Javascript. Are you familiar with AJAX-calls? I think those would be most convenient here.
– Anton vBR
Nov 25 '18 at 6:31
add a comment |
I'm trying to create a view that change a boolean and switch images from it, I already done it but I need to iterate between 12 values (asiento) and i only can point to one of them this is my Django code.
models.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)
views.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>
this code change the value only of the first Asientos.objects.get(asiento=asientos) even when i click another one it just change the value of the first object in my DB.
How can i change the value of the object that i click?
python django
I'm trying to create a view that change a boolean and switch images from it, I already done it but I need to iterate between 12 values (asiento) and i only can point to one of them this is my Django code.
models.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)
views.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>
this code change the value only of the first Asientos.objects.get(asiento=asientos) even when i click another one it just change the value of the first object in my DB.
How can i change the value of the object that i click?
python django
python django
edited Nov 26 '18 at 6:30
charlie
asked Nov 25 '18 at 5:39
charliecharlie
34
34
1
Looks that you need some Javascript. Are you familiar with AJAX-calls? I think those would be most convenient here.
– Anton vBR
Nov 25 '18 at 6:31
add a comment |
1
Looks that you need some Javascript. Are you familiar with AJAX-calls? I think those would be most convenient here.
– Anton vBR
Nov 25 '18 at 6:31
1
1
Looks that you need some Javascript. Are you familiar with AJAX-calls? I think those would be most convenient here.
– Anton vBR
Nov 25 '18 at 6:31
Looks that you need some Javascript. Are you familiar with AJAX-calls? I think those would be most convenient here.
– Anton vBR
Nov 25 '18 at 6:31
add a comment |
1 Answer
1
active
oldest
votes
There are multiple way to achieve this. This is probably the most basic:
Change
reservacion()
to:
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 })
Change url to something like this:
path('asiento/', views.reservacion, name='asientos'),
path('asiento/change_status/<int:asiento_id>/', views.reservacion, name='reservacion_status')
Change html to:
<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>
If you want to use POST method, then one fairly basic approach is with Javascript/jQuery.
Change reservacation() to:
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 })
Your url is probably right. Should be something like this:
path('asiento/change_status/', views.reservacion, name='reservacion_status')
Change html to:
<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>
I guess that's a good start. This code can be improved in a number of ways, but that's beyond this question.
im trying but it doesnt work, if i do it it doesnt shows the objects, now i want to explain this, i already have 12 Asientos.objects.all() in my data base so what i want its to show them as a image and to change its boolean value when the user clicks them, i just cant get every object separated, in the html that you send me it doesnt shows the divs but everything seems to be ok i dont known why it doesnt shows them
– charlie
Nov 25 '18 at 18:16
If you're not seeing divs, then everything is not ok. Are you sure you used{% for asiento in asientos %}
in HTML and includedasientos
in the context?
– Borut
Nov 25 '18 at 18:27
yea, now i already have the divs but i can only change the status of the first one, im pointing to asiento_id in estatus but it only takes the first one (it prints the 12 divs and they are clickable but no matter wich one i click it only change the first one), i can even print the id of every one from 1 to 12 but cant get the status of each one
– charlie
Nov 25 '18 at 19:26
Right, I see. I'll fix the code in the example.
– Borut
Nov 25 '18 at 19:38
@charlie, I have changed the code for the second example with POST method. I guess that's the one you're trying to implement, You should be able to debug this from here on yourself. I can't really test this code, but it should work.
– Borut
Nov 25 '18 at 19:55
|
show 7 more comments
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53464967%2fdjango-how-to-use-a-html-tag-attribute-in-views-py%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
There are multiple way to achieve this. This is probably the most basic:
Change
reservacion()
to:
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 })
Change url to something like this:
path('asiento/', views.reservacion, name='asientos'),
path('asiento/change_status/<int:asiento_id>/', views.reservacion, name='reservacion_status')
Change html to:
<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>
If you want to use POST method, then one fairly basic approach is with Javascript/jQuery.
Change reservacation() to:
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 })
Your url is probably right. Should be something like this:
path('asiento/change_status/', views.reservacion, name='reservacion_status')
Change html to:
<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>
I guess that's a good start. This code can be improved in a number of ways, but that's beyond this question.
im trying but it doesnt work, if i do it it doesnt shows the objects, now i want to explain this, i already have 12 Asientos.objects.all() in my data base so what i want its to show them as a image and to change its boolean value when the user clicks them, i just cant get every object separated, in the html that you send me it doesnt shows the divs but everything seems to be ok i dont known why it doesnt shows them
– charlie
Nov 25 '18 at 18:16
If you're not seeing divs, then everything is not ok. Are you sure you used{% for asiento in asientos %}
in HTML and includedasientos
in the context?
– Borut
Nov 25 '18 at 18:27
yea, now i already have the divs but i can only change the status of the first one, im pointing to asiento_id in estatus but it only takes the first one (it prints the 12 divs and they are clickable but no matter wich one i click it only change the first one), i can even print the id of every one from 1 to 12 but cant get the status of each one
– charlie
Nov 25 '18 at 19:26
Right, I see. I'll fix the code in the example.
– Borut
Nov 25 '18 at 19:38
@charlie, I have changed the code for the second example with POST method. I guess that's the one you're trying to implement, You should be able to debug this from here on yourself. I can't really test this code, but it should work.
– Borut
Nov 25 '18 at 19:55
|
show 7 more comments
There are multiple way to achieve this. This is probably the most basic:
Change
reservacion()
to:
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 })
Change url to something like this:
path('asiento/', views.reservacion, name='asientos'),
path('asiento/change_status/<int:asiento_id>/', views.reservacion, name='reservacion_status')
Change html to:
<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>
If you want to use POST method, then one fairly basic approach is with Javascript/jQuery.
Change reservacation() to:
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 })
Your url is probably right. Should be something like this:
path('asiento/change_status/', views.reservacion, name='reservacion_status')
Change html to:
<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>
I guess that's a good start. This code can be improved in a number of ways, but that's beyond this question.
im trying but it doesnt work, if i do it it doesnt shows the objects, now i want to explain this, i already have 12 Asientos.objects.all() in my data base so what i want its to show them as a image and to change its boolean value when the user clicks them, i just cant get every object separated, in the html that you send me it doesnt shows the divs but everything seems to be ok i dont known why it doesnt shows them
– charlie
Nov 25 '18 at 18:16
If you're not seeing divs, then everything is not ok. Are you sure you used{% for asiento in asientos %}
in HTML and includedasientos
in the context?
– Borut
Nov 25 '18 at 18:27
yea, now i already have the divs but i can only change the status of the first one, im pointing to asiento_id in estatus but it only takes the first one (it prints the 12 divs and they are clickable but no matter wich one i click it only change the first one), i can even print the id of every one from 1 to 12 but cant get the status of each one
– charlie
Nov 25 '18 at 19:26
Right, I see. I'll fix the code in the example.
– Borut
Nov 25 '18 at 19:38
@charlie, I have changed the code for the second example with POST method. I guess that's the one you're trying to implement, You should be able to debug this from here on yourself. I can't really test this code, but it should work.
– Borut
Nov 25 '18 at 19:55
|
show 7 more comments
There are multiple way to achieve this. This is probably the most basic:
Change
reservacion()
to:
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 })
Change url to something like this:
path('asiento/', views.reservacion, name='asientos'),
path('asiento/change_status/<int:asiento_id>/', views.reservacion, name='reservacion_status')
Change html to:
<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>
If you want to use POST method, then one fairly basic approach is with Javascript/jQuery.
Change reservacation() to:
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 })
Your url is probably right. Should be something like this:
path('asiento/change_status/', views.reservacion, name='reservacion_status')
Change html to:
<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>
I guess that's a good start. This code can be improved in a number of ways, but that's beyond this question.
There are multiple way to achieve this. This is probably the most basic:
Change
reservacion()
to:
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 })
Change url to something like this:
path('asiento/', views.reservacion, name='asientos'),
path('asiento/change_status/<int:asiento_id>/', views.reservacion, name='reservacion_status')
Change html to:
<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>
If you want to use POST method, then one fairly basic approach is with Javascript/jQuery.
Change reservacation() to:
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 })
Your url is probably right. Should be something like this:
path('asiento/change_status/', views.reservacion, name='reservacion_status')
Change html to:
<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>
I guess that's a good start. This code can be improved in a number of ways, but that's beyond this question.
edited Nov 26 '18 at 17:35
answered Nov 25 '18 at 11:32
BorutBorut
1,814259
1,814259
im trying but it doesnt work, if i do it it doesnt shows the objects, now i want to explain this, i already have 12 Asientos.objects.all() in my data base so what i want its to show them as a image and to change its boolean value when the user clicks them, i just cant get every object separated, in the html that you send me it doesnt shows the divs but everything seems to be ok i dont known why it doesnt shows them
– charlie
Nov 25 '18 at 18:16
If you're not seeing divs, then everything is not ok. Are you sure you used{% for asiento in asientos %}
in HTML and includedasientos
in the context?
– Borut
Nov 25 '18 at 18:27
yea, now i already have the divs but i can only change the status of the first one, im pointing to asiento_id in estatus but it only takes the first one (it prints the 12 divs and they are clickable but no matter wich one i click it only change the first one), i can even print the id of every one from 1 to 12 but cant get the status of each one
– charlie
Nov 25 '18 at 19:26
Right, I see. I'll fix the code in the example.
– Borut
Nov 25 '18 at 19:38
@charlie, I have changed the code for the second example with POST method. I guess that's the one you're trying to implement, You should be able to debug this from here on yourself. I can't really test this code, but it should work.
– Borut
Nov 25 '18 at 19:55
|
show 7 more comments
im trying but it doesnt work, if i do it it doesnt shows the objects, now i want to explain this, i already have 12 Asientos.objects.all() in my data base so what i want its to show them as a image and to change its boolean value when the user clicks them, i just cant get every object separated, in the html that you send me it doesnt shows the divs but everything seems to be ok i dont known why it doesnt shows them
– charlie
Nov 25 '18 at 18:16
If you're not seeing divs, then everything is not ok. Are you sure you used{% for asiento in asientos %}
in HTML and includedasientos
in the context?
– Borut
Nov 25 '18 at 18:27
yea, now i already have the divs but i can only change the status of the first one, im pointing to asiento_id in estatus but it only takes the first one (it prints the 12 divs and they are clickable but no matter wich one i click it only change the first one), i can even print the id of every one from 1 to 12 but cant get the status of each one
– charlie
Nov 25 '18 at 19:26
Right, I see. I'll fix the code in the example.
– Borut
Nov 25 '18 at 19:38
@charlie, I have changed the code for the second example with POST method. I guess that's the one you're trying to implement, You should be able to debug this from here on yourself. I can't really test this code, but it should work.
– Borut
Nov 25 '18 at 19:55
im trying but it doesnt work, if i do it it doesnt shows the objects, now i want to explain this, i already have 12 Asientos.objects.all() in my data base so what i want its to show them as a image and to change its boolean value when the user clicks them, i just cant get every object separated, in the html that you send me it doesnt shows the divs but everything seems to be ok i dont known why it doesnt shows them
– charlie
Nov 25 '18 at 18:16
im trying but it doesnt work, if i do it it doesnt shows the objects, now i want to explain this, i already have 12 Asientos.objects.all() in my data base so what i want its to show them as a image and to change its boolean value when the user clicks them, i just cant get every object separated, in the html that you send me it doesnt shows the divs but everything seems to be ok i dont known why it doesnt shows them
– charlie
Nov 25 '18 at 18:16
If you're not seeing divs, then everything is not ok. Are you sure you used
{% for asiento in asientos %}
in HTML and included asientos
in the context?– Borut
Nov 25 '18 at 18:27
If you're not seeing divs, then everything is not ok. Are you sure you used
{% for asiento in asientos %}
in HTML and included asientos
in the context?– Borut
Nov 25 '18 at 18:27
yea, now i already have the divs but i can only change the status of the first one, im pointing to asiento_id in estatus but it only takes the first one (it prints the 12 divs and they are clickable but no matter wich one i click it only change the first one), i can even print the id of every one from 1 to 12 but cant get the status of each one
– charlie
Nov 25 '18 at 19:26
yea, now i already have the divs but i can only change the status of the first one, im pointing to asiento_id in estatus but it only takes the first one (it prints the 12 divs and they are clickable but no matter wich one i click it only change the first one), i can even print the id of every one from 1 to 12 but cant get the status of each one
– charlie
Nov 25 '18 at 19:26
Right, I see. I'll fix the code in the example.
– Borut
Nov 25 '18 at 19:38
Right, I see. I'll fix the code in the example.
– Borut
Nov 25 '18 at 19:38
@charlie, I have changed the code for the second example with POST method. I guess that's the one you're trying to implement, You should be able to debug this from here on yourself. I can't really test this code, but it should work.
– Borut
Nov 25 '18 at 19:55
@charlie, I have changed the code for the second example with POST method. I guess that's the one you're trying to implement, You should be able to debug this from here on yourself. I can't really test this code, but it should work.
– Borut
Nov 25 '18 at 19:55
|
show 7 more comments
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53464967%2fdjango-how-to-use-a-html-tag-attribute-in-views-py%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Looks that you need some Javascript. Are you familiar with AJAX-calls? I think those would be most convenient here.
– Anton vBR
Nov 25 '18 at 6:31