簡體   English   中英

Django POST請求通過ajax嗎?

[英]Django POST request Via ajax?

我正在嘗試通過Ajax向django后端提交值,但我一直在收到此錯誤。 Advice matching query does not exist ,但它確實存在於數據庫中。 我不知道我在做什么錯。 這是我的AJAX請求代碼段:

$.ajax({
    type: 'POST',
    url: '{% url "recsystem:saveData" %}',
    data: {
        'csrfmiddlewaretoken' : "{{  csrf_token  }}",
        'ansId' : data.ansId,
        'queTitle': data.queTitle,
        'queText' : data.queText,
        'desc': data.desc,
        'optionType': data.optionType,
        'anstextArray': data.anstextArray,
        'ansAdvicesArray': data.ansAdvicesArray
     },
     success: function(data){
         console.log(data);
     },
     error: function(error){
         console.log(error);
     }
});

這是我在Django視圖中保存此數據的功能。

def saveData(request):

if request.method =='POST' and request.is_ajax():    
    q = Question()
    q.question_title = request.POST['queTitle']
    q.question_text = request.POST['queText']
    q.description = request.POST['desc']
    q.options_type = request.POST['optionType']
    q.save()

    if not request.POST['ansId'] is None:
        followup = FollowUp()
        followup.description = ""
        followup.answer = Answer.objects.get(pk=request.POST['ansId'])
        followup.question = q
        followup.save()

    if not request.POST.get('anstextArray', False) is None:
        answers = []
        advices = []
        answers = request.POST.get('anstextArray', False)
        advices = request.POST.get('ansAdvicesArray', False)
        for an, ad in zip(itertools.repeat(answers), itertools.repeat(advices)):
            adviceList = []
            adviceList = ad
            answer = Answer()
            answer.question = q
            answer.answer_text = an

            for id in itertools.repeat(adviceList):
                answer.advice = Advice.objects.get(pk=id)

            answer.save()

    return JsonResponse({'result':'ok'})

else:
    return JsonResponse({'result':'nok'})

這是我的數據庫模型:

class Question(models.Model):
  question_title = models.CharField(max_length = 250)
  question_text = models.TextField(max_length = 3000)
  description = models.TextField(max_length = 3000)
  options_type = models.CharField(max_length = 250)

  def __str__(self):
         return self.question_title

class Advice(models.Model):
  advice_label = models.TextField(max_length = 2000)
  advice_text = models.TextField(max_length = 3000)
  time_stamp = models.TextField( default=timezone.now, max_length= 2000)


  def __str__(self):
        return self.advice_label


class Answer(models.Model):
  question = models.ForeignKey(Question, on_delete=models.CASCADE)
  answer_text = models.CharField(max_length = 250)
  advices = models.ManyToManyField(Advice)
  def __str__(self):
         return self.answer_text


class FollowUp(models.Model):
  description = models.CharField(max_length = 250)
  answer = models.ForeignKey(Answer, on_delete=models.CASCADE)
  question = models.ForeignKey(Question, on_delete=models.CASCADE)

問題出在某個地方,我試圖將數組另存為列表,然后進行遍歷。

Traceback: 

File "C:\Users\habib\AppData\Local\Programs\Python\Python36-32\lib\site- 
packages\django\core\handlers\exception.py" in inner
41.             response = get_response(request)

File "C:\Users\habib\AppData\Local\Programs\Python\Python36-32\lib\site- 
packages\django\core\handlers\base.py" in _get_response
187.                 response = self.process_exception_by_middleware(e, 
request)

File "C:\Users\habib\AppData\Local\Programs\Python\Python36-32\lib\site- 
packages\django\core\handlers\base.py" in _get_response
185.                 response = wrapped_callback(request, *callback_args, 
**callback_kwargs)

File "C:\Users\habib\Desktop\recommender\src\recsystem\views.py" in saveData
177.                     answer.advice = Advice.objects.get(pk=id)

File "C:\Users\habib\AppData\Local\Programs\Python\Python36-32\lib\site- 
packages\django\db\models\manager.py" in manager_method
 85.                 return getattr(self.get_queryset(), name)(*args, 
**kwargs)

File "C:\Users\habib\AppData\Local\Programs\Python\Python36-32\lib\site- 
packages\django\db\models\query.py" in get
380.                 self.model._meta.object_name

Exception Type: DoesNotExist at /recsystem/saveData/
Exception Value: Advice matching query does not exist.

我的問題有點不清楚,但是當您嘗試使用Model.objects.get()方法從db檢索不存在的數據時,確實發生了這種錯誤。

我懷疑您的問題出在以下代碼上。

Advice.objects.get(pk=id)

因此,為確保這一點,請調試此點以獲取id ,然后在db中手動檢查與該id相關聯的數據是否存在。

您也可以使用其他方法來從db中檢索數據,例如get_object_or_404(Advice, pk=id)甚至filter()方法都可get_object_or_404(Advice, pk=id)幫助。

異常類型:DidNotExist表示您根據pk進行過濾,但“ =”后面的數據不是ID。 確保此itertools.repeat(adviceList)是ID列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM