Python django的Ajax错误

Python django的Ajax错误,python,django,Python,Django,我正在尝试使用ajax激活“添加到收藏夹”按钮,如果该按钮已经存在,则应将其从收藏夹中删除,以下是我的完整文件: 型号.py class Favorite(models.Model): item = models.ForeignKey(Item, on_delete='CASCADE') user = models.ForeignKey(UserModel, on_delete='CASCADE') class Meta: unique_together

我正在尝试使用ajax激活“添加到收藏夹”按钮,如果该按钮已经存在,则应将其从收藏夹中删除,以下是我的完整文件:

型号.py

class Favorite(models.Model):
    item = models.ForeignKey(Item, on_delete='CASCADE')
    user = models.ForeignKey(UserModel, on_delete='CASCADE')

    class Meta:
        unique_together = (('item', 'user'), )
path('<int:pk>/favorite_item/', views.favorite_item, name='favorite_item'),
@login_required
def favorite_item (request, pk):
    favitem = get_object_or_404(Item, pk=pk)
    data = {
        'is_fav': Favorite.objects.get(user=request.user, item=favitem).exists(),
    }

    if data ['is_fav']:
        Favorite.objects.get(user=request.user, item=favitem).delete()
    else:
        new_entry = Favorite.objects.create(item=favitem, user=request.user)

    return JsonResponse(data)
url.py

class Favorite(models.Model):
    item = models.ForeignKey(Item, on_delete='CASCADE')
    user = models.ForeignKey(UserModel, on_delete='CASCADE')

    class Meta:
        unique_together = (('item', 'user'), )
path('<int:pk>/favorite_item/', views.favorite_item, name='favorite_item'),
@login_required
def favorite_item (request, pk):
    favitem = get_object_or_404(Item, pk=pk)
    data = {
        'is_fav': Favorite.objects.get(user=request.user, item=favitem).exists(),
    }

    if data ['is_fav']:
        Favorite.objects.get(user=request.user, item=favitem).delete()
    else:
        new_entry = Favorite.objects.create(item=favitem, user=request.user)

    return JsonResponse(data)
home.html

{% extends 'fostania_web_app/base.html' %}
{% block javascript %}
  <script>
    $("#add_to_fav").click(function () {
      console.log( $(this).val() );
    });
              $.ajax({
        url: form.attr("data-favorite_item-url"),
        data: form.serialize(),
        dataType: 'json',
        success: function (data) {
          if (data.is_fav) {
            alert('تم');
          }
        }
      });

    });
  </script>

  </script>
{% endblock %}
{% block content %}
{% load static %}

        {% include 'fostania_web_app/slide.html' %}

 <!-- Page Content -->
    <div class="container">

      <h1 class="my-4" align="right" dir="rtl">إستثمرى فساتينك القديمة مع Fostania</h1>

      <!-- Marketing Icons Section -->
      <div class="row">
        <div class="col-lg-4 mb-4">
          <div class="card h-100">
            <h4 class="card-header" align="right">إنشاء حساب جديد</h4>
            <div class="card-body">
              <p class="card-text" align="center"><img src="{% static 'img/add_user_big.png' %}"><Br>
                  قم بإنشاء حساب جديد على فوستانيا حتى تستطيع عرض الفستان على الموقع</p>
            </div>
            <div class="card-footer" align="right">
              <a href="{% url 'signup' %}" class="btn btn-primary" style="background: linear-gradient(to right, #ff00a4 , #871f78);border-color: #871f78;">تسجيل حساب جديد</a>
            </div>
          </div>
        </div>
        <div class="col-lg-4 mb-4">
          <div class="card h-100">
            <h4 class="card-header" align="right">عرض الفستان على الموقع</h4>
            <div class="card-body">
              <p class="card-text" align="center"><img src="{% static 'img/plus_big.png' %}"><Br>
                  قم بإضافة الفستان مجاناً على الموقع حتى يصل الى مئات المشتريين و المهتمين
              </p>
            </div>
            <div class="card-footer" align="right">
              <a href="{% url 'dress_add' %}" class="btn btn-primary" style="background: linear-gradient(to right, #ff00a4 , #871f78);border-color: #871f78;">عرض الفستان على الموقع</a>
            </div>
          </div>
        </div>
        <div class="col-lg-4 mb-4">
          <div class="card h-100">
            <h4 class="card-header" align="right">إبحثى عن الفستان المطلوب</h4>
            <div class="card-body">
              <p class="card-text" align="center"><img src="{% static 'img/search_big.png' %}"><Br>
                  او يمكن البحث عن الفستان المراد شرائه او تأجيره من وسط مئات الفساتين المعروضة</p>
            </div>
            <div class="card-footer" align="right">
              <a href="{% url 'dress_list' %}" class="btn btn-primary" style="background: linear-gradient(to right, #ff00a4 , #871f78);border-color: #871f78;">إبدأ البحث</a>
            </div>
          </div>
        </div>
      </div>
      <!-- /.row -->
        <!-- adsense -->
    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- Fostania-main -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4202417439740489"
     data-ad-slot="1170851377"
     data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
    <!-- end -->
      <!-- Portfolio Section -->
      <h2 align="right"> اخر الفساتين المضافة للموقع</h2>

      <div class="row">
          {% for dress in dresss %}
        <div class="col-lg-4 col-sm-6 portfolio-item">
          <div class="card h-100" >
            <a href="{% url 'dress_details' dress.pk%}" align="center"><img class="card-img-top" src="{{ dress.dress_image1.url }}" style='width: 200px;height: 200px;' alt=""></a>
            <div class="card-body">
              <h4 class="card-title" align="center">
                    {% if user.is_authenticated %}

                               {% if user_favs %}
                      {% for item in user_favs %}
                  {% if item.item == dress %}
                                                      <a href="{% url 'favorite_item' dress.id %}" id="add_to_fav">
                  <img src="{% static 'img/star-yes.png' %}" title="مسح من  الفساتين المفضلة"></a>
{% else %}

                                <a href="{% url 'favorite_item' dress.id %}" id="add_to_fav">
                  <img src="{% static 'img/star_no.png' %}" title="إضافة إلى الفساتين المفضلة"></a>

                          {% endif %}
                          {% endfor %}
              {% else %}
                                              <a href="{% url 'favorite_item' dress.id %}" id="add_to_fav">
                  <img src="{% static 'img/star_no.png' %}" title="إضافة إلى الفساتين المفضلة"></a>
              {% endif %}
              {% endif %}

                <a href="{% url 'dress_details' dress.pk%}">{{ dress.dress_name }}</a>
                <Br>
                <h3><span class="badge badge-warning">{{ dress.dress_price }} EGP</span></h3>
              </h4>
              <p class="card-text" align="right">
معروض {{ dress.dress_action }} <br>
                  فى محافظة {{ dress.dress_town }}
              </p>
            </div>
          </div>
        </div>
{% endfor %}
      </div>

<!-- paginator part -->
<div align="right">
        {% if dresss.has_previous %}
                        <a href="?page=1"><button class="btn btn-success">&laquo; الأولى </button></a>
            <a href="?page={{ dresss.previous_page_number }}"> <button class="btn btn-success">السابقة</button> </a>
        {% endif %}
</div>
    <div align="center">
        <span class="current" >
            صفحة رقم  {{ dresss.number }} من إجمالى {{ dresss.paginator.num_pages }}
        </span>
    </div>
    <div align="left">
        {% if dresss.has_next %}
                                    <a href="?page={{ dresss.next_page_number }}"><button class="btn btn-success">التالية</button>  </a>
            <a href="?page={{ dresss.paginator.num_pages }}"><button class="btn btn-success">الاخيرة  &raquo;</button> </a>
                    {% endif %}
</div>


      <!-- paginator part ends -->
    <hr>

      <!-- Call to Action Section -->

    <!-- /.container -->
{% endblock %}
{%extensed'fostania\u web\u app/base.html%}
{%block javascript%}
$(“#将#添加到#fav”)。单击(函数(){
log($(this.val());
});
$.ajax({
url:form.attr(“data-favorite\u item-url”),
数据:form.serialize(),
数据类型:“json”,
成功:功能(数据){
if(数据为fav){
警惕(تم);;
}
}
});
});
{%endblock%}
{%block content%}
{%load static%}
{%include'fostania_web_app/slide.html%}
福斯坦尼亚
إنشاء حساب جديد


在2016年5月月的上半半半方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方الموع

عرض الفستان على الموقع


قم بإضافة الفستان مجاناً على الموقع حتى يصل الى مئات المشتريين و المهتمين

إبحثى عن الفستان المطلوب


在15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半半ف

(adsbygoogle=window.adsbygoogle | |[]).push({}); اخر الفساتين المضافة للموقع {穿着连衣裙的百分比%} {%if user.u经过身份验证%} {%if用户_favs%} {用户中项目的%u favs%} {%if item.item==dress%} {%else%} {%endif%} {%endfor%} {%else%} {%endif%} {%endif%}
{{dress.dress_price}}EGP

معوض{{dress.dress_action}}
فىمحا㶡{dress.dress_town}

{%endfor%} {%如果dresss.has_previous%} {%endif%} (1)(15777)(dresss.number)(1605;)(1573)(1575;)(dresss.paginator.num)(paginator pages) {%如果dresss.has_next%} {%endif%}
{%endblock%}
最后它给了我一个错误

DoesNotExist at/3/favorite_项目/ 收藏夹匹配查询不存在


我做了一个普通的请求,当用户点击它时,它会重新加载,并且工作得很好,但是我需要使用Ajax来防止页面重新加载。

我认为您需要使用
POST方法来调用Ajax

<script>
    $("#add_to_fav").click(function () {
        console.log( $(this).val() );
    });
    $.ajax({
        url: form.attr("data-favorite_item-url"),
        data: form.serialize(),
        dataType: 'json',
        method: 'POST', # <- here
        ...
    });
});
</script>

$(“#将#添加到#fav”)。单击(函数(){
log($(this.val());
});
$.ajax({
url:form.attr(“data-favorite\u item-url”),
数据:form.serialize(),
数据类型:“json”,

方法:'POST',#我认为您需要使用
POST方法来调用ajax

<script>
    $("#add_to_fav").click(function () {
        console.log( $(this).val() );
    });
    $.ajax({
        url: form.attr("data-favorite_item-url"),
        data: form.serialize(),
        dataType: 'json',
        method: 'POST', # <- here
        ...
    });
});
</script>

$(“#将#添加到#fav”)。单击(函数(){
log($(this.val());
});
$.ajax({
url:form.attr(“data-favorite\u item-url”),
数据:form.serialize(),
数据类型:“json”,

方法:'POST',#如果
不存在
收藏夹
,这将引发,因为您正在使用
get()
get()
如果找不到对象则引发:

我认为您需要的是
filter()
exists()
的组合,如下所示:

    data = {
        'is_fav': Favorite.objects.filter(user=request.user, item=favitem).exists(),
    }

如果
项的
收藏夹
不存在,则会引发此问题,因为您正在使用
get()
get()
如果找不到对象,则会引发:

我认为您需要的是
filter()
exists()
的组合,如下所示:

    data = {
        'is_fav': Favorite.objects.filter(user=request.user, item=favitem).exists(),
    }

您能显示所有回溯吗?看起来在您的数据库中找不到
收藏夹
:Favorite.objects.get(user=request.user,item=favitem).exists()
。因此,存在一个具有
pk=3
,但它找不到与之关联的
收藏夹
对象。它是否保证存在?能否显示所有回溯?看起来它在您的数据库中找不到
收藏夹:
'Is\u fav':Favorite.objects.get(user=request.user,Item=favitem.exists()
。因此,存在一个
,它的
pk=3
,但它找不到与之关联的
收藏的
对象。它保证存在吗?它没有引发错误,但它给了我这个
{“Is\u fav”:false}
,我认为问题现在在ajax脚本中,我应该告诉它在{“Is\fav”时如何采取行动:false}..但是我不知道怎么做!而且,它在数据库中正常工作。因为它在不存在时插入一行