Я пытаюсь отправить значения через 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.info(data);
},
error: function(error){
console.info(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().
Я подозреваю, что ваша проблема заключается в следующем коде.
Advice.objects.get(pk=id)
Чтобы убедиться в этом, выполните отладку этой точки, чтобы получить id, а затем вручную проверьте в базе данных, существуют ли данные, связанные с этим id, или нет.
Также вы можете использовать другой метод для извлечения данных из базы данных, например get_object_or_404(Advice, pk=id), или даже метод filter() может вам помочь.
Что ж, довольно ясно, что ошибка именно в этой строке, но вопрос в том, почему? Поскольку идентификатор существует в базе данных, как и объект
@SyedFarhanHabib ты уже решил это? Кстати, вы уверены, что идентификатор действителен для каждого случая в этом цикле. Я так не думаю.
Тип исключения: DoesNotExist означает, что вы фильтруете на основе pk, но данные за "=" не являются идентификатором. Убедитесь, что itertools.repeat (adviceList) - это список идентификаторов.
Не могли бы вы опубликовать обратную связь (ошибки)?