前提・実現したいこと
Django,Bootstrap5を使用している作成中のwebサイトで、Ajaxを利用したいいね機能を実装したい。
発生している問題・エラーメッセージ
No Idea matches the given query.
views.pyにて、ajaxからとってきた情報を代入してるidea_pk=request.POST.get('idea_pk')ここの部分でエラーが起きていると考えられるため、おそらくjavascriptが読み込めていないのが原因…?
いいね機能実装における問題は他の点にもあるかもですが、一旦上記のエラーを解決したいです。
お手数おかけいたしますがよろしくお願いいたします
該当のソースコード
↓static/javascript/ajax.js
$(document).ready(function(event){ $(document).on('click', '#good', function(event){ event.preventDefault(); $.ajax({ type: 'POST', url: "{% url 'post:good' %}", data: {'idea_pk': $(this).attr('name'), 'csrfmiddlewaretoken': '{{ csrf_token }}'}, dataType: 'json' }) .done(function(response){ selector = document.getElementsByName(response.idea_pk); if(response.liked) { $(selector).html("<i class='fas fa-lg fa-heart'></i>"); } else { $(selector).html("<i class='far fa-lg fa-heart'></i>"); } }); }); });
↓post_detail.htmlの該当部分(base.htmlで<script type="text/javascript" src="{% static 'javascript/ajax.js' %}"></script>と記入しており、またこのhtmlでもload staticしてます。
<form id="good" action="{% url 'post:good'%}" method="POST"> {% csrf_token %} <button name="{{idea.pk}}" class="btn btn-primary"><i class='fas fa-lg fa-heart'></i></button> {{ idea|goods_count }} </form>
↓post/views.pyの該当部分
@login_required def good(request): idea_pk=request.POST.get('idea_pk') if request.method == 'POST': query = Good.objects.filter(user = request.user, target=get_object_or_404(Idea, pk=idea_pk)) liked = False if query.count() == 0: good = Good() good.user = request.user good.target = get_object_or_404(Idea, pk=idea_pk) good.created_date = make_aware(datetime.datetime.now()) good.save() liked= True else: query.delete() context = { 'idea_pk' : idea_pk, 'liked' : liked, } return JsonResponse(context)
↓post/urls.pyの該当部分
path('good/', views.good, name='good'),
あなたの回答
tips
プレビュー