Избегайте изменения адреса при отправке GET-запроса (django)
У меня есть url http://127.0.0.1:8000/profile/question/1/ и на адресе есть форма
я хочу иметь кнопку нравится или не нравится на посте. все работает хорошо, но изменение url является проблемой.
это мой код - >
def get_context_data(self, *args, **kwargs):
self.object=self.get_object()
context = super(QuestionDetail, self).get_context_data(**kwargs)
if "like" or "dislike" in self.request.GET:
if "like" in self.request.GET:
if bool(Like.objects.filter(user=self.request.user, question=self.get_object())) == True:
pass
else:
Like.objects.create(user=self.request.user, question=self.get_object())
elif "dislike" in self.request.GET:
if bool(DisLike.objects.create(user=self.request.user, question=self.get_object())) == True:
pass
else:
DisLike.objects.create(user=self.request.user, question=self.get_object())
try:
question = Question.objects.get(id=self.kwargs["pk"])
context['detail'] = question
except ObjectDoesNotExist:
return reverse("Profile:error")
<form class="float-right block">
<button type="submit" name="like" class="block mb-2"></button>
<button type="submit" name="dislike" class="block"></button>
</form>
когда я нажимаю, например, кнопку like, url меняется и становится http://127.0.0.1:8000/profile/question/1/?like=.
как избежать этой проблемы? и в чем проблема?
спасибо
Это правильно. Когда у вас есть несколько кнопок отправки, на бэкенде у вас должен быть способ узнать, какая кнопка отправки была выбрана. Вы должны иметь имя и значения для каждой кнопки отдельно. Например:
<form class="float-right block">
<button type="submit" name="type" value="like" class="block mb-2"></button>
<button type="submit" name="type" value="dislike" class="block"></button>
</form>
Кнопка like отправит форму на:
http://127.0.0.1:8000/profile/question/1/?type=like
Кнопка dislike отправит форму на:
http://127.0.0.1:8000/profile/question/1/?type=dislike
Затем в бэкенде вы можете получить тип этой кнопки отправки, используя:
btype = request.GET.get('type', 'like')
# Or if the method of the form is POST use
btype = request.POST.get('type', 'like')