/ / Problémy Django POST v zobrazeniach - django, python-2.7, django-views

Django POST problémy v pohľade - django, python-2.7, django-views

Snažím sa umožniť používateľovi aktualizovať booleovskú hodnotupremenná modelu, ale zdá sa, že mám problém s uložením zmeny do db a následným vykreslením zmeny v šablóne. model je „Pic“ a logická premenná je „dobrá“.

V šablóne (s mierkou „single_picture“):

<form action="" method="POST">
{% csrf_token %}
{% if Pic.Good %}
<input type="submit" name="choice" id="{{ Pic.id }}" value="False" />
{% else %}
<input type="submit" name="choice" id="{{ Pic.id }}" value="True" />
{% endif %}
</form>

V adresách URL aplikácie:

url(r"^(?P<Pic_id>d+)/$", views.single_picture, name="single_picture"),

a v views.py:

def single_picture(request, Pic_id):
# "detail" in tutorial
if request.method == "GET":
pic = get_object_or_404(Pic, pk=Pic_id)
latest_pictures_list = Pic.objects.all()
return render(request, "pictures/single_picture.html", {"Pic": pic, "latest_pictures_list": latest_pictures_list})
elif request.method == "POST":
pic = get_object_or_404(Pic, pk=Pic_id)
latest_pictures_list = Pic.objects.all()
try:
pic.Good=request.POST["choice"]
except (KeyError, Pic.DoesNotExist):
return render(request, "pictures/single_picture.html", {"Pic": pic, "error_message": "uhhhh...",
})
else:
pic.save()
return HttpResponseRedirect(reverse("pictures:pic", pic.id))

Ak na konci príkazu try: print vytlačím pic.Good do terminálu, vidím, že ukazuje zmenený, ale zdá sa, že pic.save () to neuloží do db a tiež

Nesprávne nakonfigurované na / obrázky / 4 /

Zahrnutý urlconf 4 nemá v sebe žiadne vzory

vo vyhlásení o vykreslení. Zdá sa, že to ukazuje na niečo, čo chýba v adresách URL projektu alebo aplikácie. Ako správne uložiť zmeny a vykresliť ich?

odpovede:

1 pre odpoveď č. 1

Podľa djanga dokumentácia o reverznej funkcii, druhým parametrom je argument urlconf.

Argument urlconf je modul URLconf obsahujúci vzory adries URL, ktoré sa majú použiť na reverzovanie.

Na zadanie parametra pre konštrukciu adresy URL musíte použiť args alebo kwargs pomenované argumenty.

Skúste zmeniť návratové vyhlásenie na niečo také:

return HttpResponseRedirect(reverse("pictures:pic", args=[pic.id]))

Neviem o probléme s uložením databázy, ale skúste presunúť svoje volanie pic save bližšie k aktualizačnému kódu pic na účely ladenia:

elif request.method == "POST":
pic = get_object_or_404(Pic, pk=Pic_id)
latest_pictures_list = Pic.objects.all()
try:
pic.Good=request.POST["choice"]
pic.save()
return HttpResponseRedirect(reverse("pictures:pic", args=[pic.id]))
except (KeyError, Pic.DoesNotExist):
return render(request, "pictures/single_picture.html", {"Pic": pic,     "error_message": "uhhhh...",
})

Upraviť 1

Pokiaľ ide o chybu NoReverseMatch, ktorú používate menné priestory url ("obrázky: pic"). Nie som s tým veľmi oboznámený, ale myslím, že zvrátiť funkcia hľadá pohľad s name = "pic" vo vnútri konfigurácie adresy URL pre fotografie app.

Ste si istý, že takéto zobrazenie existuje v konfiguračnom súbore adresy URL?


-1 pre odpoveď č. 2

nie odpoveď na vašu otázku, ale dobrý tip je nahradiť ju:

<form action="" method="POST">
{% csrf_token %}
{% if Pic.Good %}
<input type="submit" name="choice" id="{{ Pic.id }}" value="False" />
{% else %}
<input type="submit" name="choice" id="{{ Pic.id }}" value="True" />
{% endif %}
</form>

s tým:

<form action="" method="POST">
{% csrf_token %}
<input type="submit" name="choice" id="{{ Pic.id }}" value={% if Pic.Good %}"True"{% else %} "False" {% endif %} />
</form>