сохранение формы в Django - PullRequest
0 голосов
/ 01 июня 2019

Я хочу сохранить простую форму в Django2

Но когда я отправляю данные формы, она выдает мне ошибку:

 __init__() got an unexpected keyword argument 'name'

это моя форма

class Message(forms.Form):
name = forms.CharField(max_length=20,
                       widget=forms.TextInput(
                           attrs={'class': 'form-control',
                                  'placeholder': 'Your Name'
                                  }))
email = forms.EmailField(widget=forms.TextInput(
    attrs={'class': 'form-control',
           'placeholder': 'Your Email'
           }))
messages = forms.CharField(widget=forms.Textarea(
    attrs={'rows': '5',
           'class': 'form-control',
           'placeholder': 'Write your message...'
           }))

это мой взгляд

 def index(request):
if request.method == 'POST':
    form = Message(request.POST)
    if form.is_valid():
        new_messages = Message(name=request.POST['name'], email=request.POST['email'],
                               messages=request.POST['messages'])
        new_messages.save()
        return redirect('index')
    else:
        form = Message()

и это моя модель

class Message(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField()
messages = models.TextField()

def __str__(self):
    return self.name

Я пытаюсь изменить имя на то, что вы думаете, но оно не сработало.

как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 01 июня 2019

Модель и Форма имеют одно и то же имя !!!!!

попробуйте этот код:

class MessageForm(forms.Form):
    name = forms.CharField(max_length=20,
                       widget=forms.TextInput(
                           attrs={'class': 'form-control',
                                  'placeholder': 'Your Name'
                                  }))
    email = forms.EmailField(widget=forms.TextInput(
        attrs={'class': 'form-control',
           'placeholder': 'Your Email'
           }))
    messages = forms.CharField(widget=forms.Textarea(
        attrs={'rows': '5',
           'class': 'form-control',
           'placeholder': 'Write your message...'
           }))

def index(request):
     if request.method == 'POST':
        form = MessageForm(request.POST)
        if form.is_valid():
            Message.objects.create(**form.cleaned_data)
            return redirect('index')
        else:
            form = MessageForm()
0 голосов
/ 01 июня 2019

Вы должны сделать вот так

data=form.cleaned_data

И использовать этот словарь в модели сообщений, убедитесь, что у вас есть поле имени в вашей модели сообщений

...