Django is_valid () бросает значение valueError при отправке формы. Не уверен, почему
-
27-10-2019 - |
Вопрос
Следующий код создает форму, основанную на модели, Post
. Анкет Проблема, с которой я сталкиваюсь, заключается в том, что форма никогда не проверяет и дает ValueError что Данные не подтвердили Если я удалю if post_form.is_valid():
Проверьте.
Однако, если я сохраняю код, как показано ниже, то есть я сохраняю if post_form.is_valid():
проверить, тогда это всегда терпит неудачу, и else
Блок выполняется.
Я пытался сохранить пользователя, который является иностранным классом для Auth Django, в моей модели, и оказывается, что я даже не могу пройти эту ошибку Vlaidtion.
Любая помощь будет оценена. Спасибо.
#----------------------------Model--------------------------------------
class Post (models.Model):
name = models.CharField(max_length=1000, help_text="required, name of the post")
user = models.ForeignKey(User, unique=False, help_text="user this post belongs to")
def __unicode__(self):
return self.name
class PostForm(ModelForm):
class Meta:
model = Post
#----------------------------./Model--------------------------------------
#----------------------------View--------------------------------------
@login_required
def create_post (request):
if request.method == 'POST':
post_form = PostForm(request.POST)
if post_form.is_valid():
post.save()
return render_to_response('home.html')
else:
return HttpResponse('not working')
else:
post_form = PostForm()
return render_to_response('create.html', {'post_form':post_form })
#----------------------------./View--------------------------------------
#----------------------------./Template--------------------------------------
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>home</title>
</head>
<body>
<form method="POST" action='.'>{% csrf_token %}
<p>{{post_form.name.label_tag}}</p>
<p>{{post_form.name}}</p>
<p><input type="submit" value="Submit"/></p>
</form>
</body>
</html>
#----------------------------./Template--------------------------------------
Решение
В другом посте вы пытались автоматически вставить user
поле, что, вероятно, означает, что у вас нет user
Поле отображается в шаблоне.
Исключите его, если вы планируете вставить пользователя в любом случае.
class PostForm(ModelForm):
class Meta:
model = Post
exclude = ('user',) # exclude this
if request.method == 'POST':
post_form = PostForm(request.POST)
if post_form.is_valid():
post = post.save(commit=False)
post.user = request.user
post.save() # now post has a user, and can actually be saved.
return render_to_response('home.html')
Другие советы
Это не показывает действительнее, потому что форма не действительна. Предположительно, тот, кто подал форму, не заполнил требуемые поля. Если вы отобразите значение form.errors
Вы поймете, почему.
В качестве альтернативы, хотя мы должны угадать, потому что вы не показали шаблон, вы не включили все необходимые поля в сам шаблон, поэтому форма никогда не будет действительной.
Удалите первое else
поговорка с его httpresponse. Затем представление будет показывать форму снова, в комплекте с ошибками.