2017-01-28 4 views
-3

Предполагается, что это пробный запуск формы регистрации, но база данных не хранит имя пользователя и пароль. Ошибка, которую я получаю, - «Пользователь не может быть создан, потому что данные не проверялись».Сохраните формы моделей в django

views.py

def add_model(request): 
    if request.method=="POST": 
     form=UserForm(request.POST) 
     if form.is_valid: 
      model_instance=form.save(commit=False) 
      model_instance.save() 

forms.py

class UserForm(forms.ModelForm): 
    class Meta: 
     model=User 
     fields=['username','password'] 

models.py

class User(models.Model): 
    username=models.CharField(max_length=25, primary_key=True,default="") 
    password=models.CharField(max_length=15,default="") 

    def __str__(self): 
     return self.username 
+0

Если вы хотите сохранить экземпляр, вам просто нужно сохранить форму: 'form.save()' – afilardo

+0

model_instance - это просто имя переменной. Я просто проверяю форму перед ее сохранением. –

+0

Что я говорю, так это просто выполнение 'form.save()' после ее проверки, вы получите экземпляр сохраненного. – afilardo

ответ

2

Это должно быть if form.is_valid() вместо if form.is_valid.

И «данные не подтвердились» в основном означает, что вы пытаетесь найти save() недопустимую форму.

+0

Выполнены проверки, указанные в модели. Почему это еще недействительная форма? –

+0

Если это говорит вам, что «данные не подтвердились», данные должны быть ошибочными. В вашем предыдущем коде 'if form.is_valid' всегда будет равен' True', и когда вы попытаетесь 'save()' он скажет вам, что данные не проверяются, если что-то не так с данными. «Проверки, указанные в модели, выполняются». Я бы сказал, что это, вероятно, НЕ проверено, и оно не пройдет 'form.is_valid()' – Shane

0

forms.py

class UserForm(forms.ModelForm): 
    class Meta: 
     model=User 
     fields=['username','password'] 
    def clean_username(self): 
     username = self.cleaned_data.get('username')  

    def clean_password(self): 
     password = self.cleaned_data.get('password') 

views.py

def add_model(request): 
      if request.method=="POST": 
       form=UserForm(request.POST or None) 
       if form.is_valid(): 
        username = form.cleaned_data['username'] 
        password = form.cleaned_data['password'] 
        new_user = User() 
        new_user.username = username 
        new_user.password = password 
        new_user.save() 

Я думаю, что это должно быть правильно работать для вашей цели.

+0

№ Не работает. Если я удалю form.is_valid() из моего исходного кода, он добавит данные в базу данных –

+0

Пожалуйста, проверьте файл формы, как я отредактировал –

+0

Nope. Все еще не работает. –