Мне нужна помощь в отношении нажатий кнопок и изменений логических значений.
Моя модель:
class Topic(models.Model):
subject = models.CharField(max_length=255)
category = models.CharField(max_length=255)
last_updated = models.DateTimeField(auto_now_add=True)
starter = models.ForeignKey(User, on_delete=models.CASCADE, related_name='topics')
slug = models.SlugField(unique=True)
isReported = models.BooleanField(default=False)
startPrice = models.IntegerField(validators=[RegexValidator(r'^\d{1,10}$')])
Я хочу изменить состояние поля «isReported» со значения по умолчанию «False» на «True» после нажатия на кнопку:
<button type="submit" class="btn btn-primary btn-block">Report</button>
Я уже гуглил и нашел что-то подобное в SO ( Как изменить значение в django при нажатии кнопки в HTML? ), но мне не хватает концепции, представленной в этой теме. К сожалению, это была единственная полезная информация, которую я смог найти.
Как я могу изменить логическое значение в моей базе данных после одного нажатия кнопки? Нет необходимости изменять значение обратно на этой кнопке.
Я кое-где пытался адаптировать код ссылки:
views.py:
def ajax_change_status(request):
isReported = request.GET.get('isReported', False)
pk = request.GET.get('pk', False)
# first you get your Job model
job = Topic.objects.get(pk=pk)
try:
job.isReported = isReported
job.save()
return JsonResponse({"success": True})
except Exception as e:
return JsonResponse({"success": False})
return JsonResponse(data)
xxx.html:
<form method="post" novalidate>
{% csrf_token %}
<button type="submit" class="btn btn-danger btn-sm" id="change" role="button">Report</button>
</form>
<script>
$("#change").on('click', function () {
var pk = '{{ topic.pk }}'
var isReported = 'True'
$.ajax({
url: '/ajax/change_status/',
data: {
'isReported': isReported
'pk': pk
},
dataType: 'json',
success: function (data) {
if (data.success) {
alert("ajax call success.");
// here you update the HTML to change the active to innactive
}else{
alert("ajax call not success.");
}
}
});
});
Я пытаюсь понять концепцию, но (обв.) Она не работает.
POST /request/xxx-xxx-xxx-5622149-3/ HTTP/1.0" 200 5472