Django is_valid () бросает значение valueError при отправке формы. Не уверен, почему

StackOverflow https://stackoverflow.com/questions/5370874

Вопрос

Следующий код создает форму, основанную на модели, 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. Затем представление будет показывать форму снова, в комплекте с ошибками.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top