[英]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.