Форма django не сохраняется, несмотря на сообщение об успехе
На этой неделе я пытался научить себя чему-то новому, изучая различные учебники по API Google. Я упираюсь в стену на этапе сохранения формы, поэтому могу помочь вам.
В основном, я пытаюсь предложить пользователю возможность ввести первую строку адреса, чтобы Google затем предоставил предложения адресов.
Первый бит работает (когда я ввожу первую строку адреса, мне выдается список предложений).
Однако, когда я пытаюсь сохранить форму, она, похоже, нигде не сохраняется. И я также не получаю никакого сообщения об ошибке (если вообще получаю "сообщение об успехе", которое я должен получить, когда форма успешно отправлена).
Я подумал, что может быть есть поле, которое не заполняется в html. Поэтому я попробовал опустошить одно из них и попытался сохранить. Но в этом случае я получил сообщение об ошибке, говорящее, что поле отсутствует. Это наводит меня на мысль, что это не связано с полями в форме, а возможно с тем, как я сохраняю форму в файле views.py.
Должен признать, что здесь я нахожусь вне своей зоны комфорта (эта штука с ajax оказалась сложной для работы, и все, что мне нужно было сделать, это следовать учебнику...), так что я не удивлюсь, что я не захватил весь код, необходимый для того, чтобы вы могли помочь. Если это так, дайте мне знать, что вам нужно увидеть.
Views.py
def is_ajax(request):
return request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'
def profile(request):
result = "Error"
message = "There was an error, please try again"
form = profileform(instance = request.user)
Profile.objects.get_or_create(user=request.user)
if is_ajax(request=request):
form = profileform(data = request.POST, instance = request.user)
if form.is_valid():
obj = form.save()
obj.has_profile = True
obj.save()
result = "Success"
message = "Your profile has been updated"
else:
message = FormErrors(form)
data = {'result': result, 'message': message}
return JsonResponse(data)
else:
context = {'form': form}
context['google_api_key'] = settings.GOOGLE_API_KEY
context['base_country'] = settings.BASE_COUNTRY
return render(request, 'main/profile.html', context)
Вместо
else:
message = FormErrors(form)
Попробуйте это
else:
message = form.errors
Интересно, что вы дошли до сообщения об успехе. Ваша проблема может заключаться в том, что вы передаете экземпляр пользователя форме, которая ожидает модель профиля (не уверен, почему это не приводит к ошибке):
# capture the profile that is created with get_or_create
profile, created = Profile.objects.get_or_create(user=request.user)
if is_ajax(request=request):
form = profileform(data = request.POST, instance=profile) # change instance