Приведенный ниже код не может сохранить введенные данные в базе данных в django

#html #django #database

#HTML #django #База данных

Вопрос:

views.py

 def contact_us(request):
    if request.method == 'POST':
        formq = forms.querys(request.POST)
        if formq.is_valid():
            obj = query()
            obj.name = formq.cleaned_data['your_name']
            obj.email = formq.cleaned_data['your_email']
            obj.message = formq.cleaned_data['your_message']
            obj.save()
            return redirect(index)
    else :
        formq = forms.querys()
    return render(request, 'home/contact_us.html', {'formq': formq})
  

models.py

 class query(models.Model):
    Name = models.CharField(max_length=200)
    Email = models.CharField(max_length = 200)
    Message = models.CharField(max_length=1500)

    def __str__(self):
        return self.Name
  

forms.py

 class querys(forms.ModelForm):
    class Meta:
        model=models.query
        fields = ['Name', 'Email','Message']
  

Пожалуйста, помогите с тем, как я могу добавить запрос в базу данных и просмотреть его на странице администратора.

Ответ №1:

Есть несколько вещей, которые вам нужно увидеть:

  1. Поскольку вы используете ModelForm, вам не нужно вручную очищать и сохранять данные, как вы это делаете.Вызов save() метода выполнит эту работу.
  2. Кроме того, не импортируйте целые формы и модели. Импортируйте то, что необходимо. Не импортируйте весь файл целиком.
  3. Вы не можете перенаправить на URL-адрес без использования reverse . Пожалуйста, посмотрите на это наоборот

Это представление допустимо, если вы используете formq объект в шаблоне, т.е. {{ formq }} Если вы создаете пользовательскую HTML-форму, убедитесь, что имя <input> полей формы совпадает с именем полей формы django.Предполагая views.py и forms.py находятся в одном и том же месте.

views.py

 from .forms import querys
from django.urls import reverse
from django.shortcuts import render,redirect

def contact_us(request):
    if request.method == 'POST':
        formq = querys(request.POST)
        if formq.is_valid():
            formq.save()
            return redirect(reverse(index))
        else:
            return render(request, 'home/contact_us.html', {'formq': formq})
    else:
        formq = querys()
        return render(request, 'home/contact_us.html', {'formq': formq})
  

Опять же, предполагая models.py и forms.py находятся в одном и том же месте.

forms.py

 from .models import query

class querys(forms.ModelForm):
    class Meta:
        model=query
        fields = ['Name', 'Email','Message']