Почему моя функция в django для изменения поля BooleanField не работает?
Я пытаюсь изменить булево поле из модели в django, используя метод post, активированный кнопкой, но он не работает, метод post из кнопки работает, но функция не делает того, что должна делать. Когда я изменяю булево значение в админке, оно работает, я думаю, что возможно проблема в функции, но я не знаю, в чем проблема.
это моя функция:
def close(request, listing_id):
listing = Listing.objects.get(id=listing_id)
if request.method == "POST":
listing.active = False
listing.save()
messages.success(request, 'You closed the Auction!')
return redirect(reverse("listing", args=[listing_id]))
Поле BooleanField, которое я хочу изменить, называется "active" (по умолчанию true).
а это кнопка:
<form action="{% url 'close' listing.id %}" method="post" >
{% csrf_token %}
<button type="submit" name="action" value="close" class="btn btn-warning mb-3">Close Auction</button>
</form>
Ваш код выглядит правильно, но я использую немного другой, и он работает для меня. Я не использую атрибут action
в форме. Кстати, я использую Django 4.0.7.
Ниже пример:
views.py
def items(request, slug, pk):
next = request.POST.get('next', '{% url "process" slug=slug %}')
item = Items.objects.get(item_id=pk)
if request.POST.get('start', False):
item.started = True # BooleanField 'started' (default = False, setted in the Items model)
item.save()
return HttpResponseRedirect(next)
else:
return render(request, 'items.html', {'slug':slug, 'pk':pk})
шаблон
<form method="post" >
{% csrf_token %}
<button type="submit" name="start" value="start" class="btn btn-warning mb-3">Start</button>
</form>
Как вы упомянули, вы хотите:
Булево поле, которое я хочу изменить, называется "active" (по умолчанию true).
Вы можете просто установить default
опцию default=True
в поле, так:
class Listing(models.Model):
active=models.BooleanField(default=True)