Django中的表单验证失败

0 投票
1 回答
826 浏览
提问于 2025-04-18 02:58

我有一个简单的表单。

这是 forms.py 的内容:

class CraveDataForm(forms.ModelForm):
    class Meta:
        model = crave_data
        exclude=['date']

class CraveReplyForm(forms.ModelForm):
    class Meta:
        model = comments
        exclude=['date', 'crave']

这是 model.py 的内容:

class crave_data(models.Model):
    #person = models.ForeignKey(User)
    post=models.TextField(blank = True,null = True)
    date= models.DateTimeField()
    def __unicode__(self):
        return self.post

class comments(models.Model):

    crave=models.OneToOneField(crave_data)
    reply=models.CharField(max_length=1000, blank = True,null = True)
    date= models.DateTimeField()
    def __unicode__(self):
        return self.reply

这是 views.py 的内容:

def crave_view(request):
    if (request.method=="POST"):
        form1=CraveDataForm(request.POST, request.FILES)
        if form1.is_valid():
            crave_made = form1.save(commit=False)
            crave_made.person = request.user
            crave_made.save()  
            messages.success(request, 'You Registered Successfully')
        else:
            messages.error(request, 'Please enter all required fields')
    else:                    
        form1=CraveDataForm()
    return render(request, "crave/crave.html", { 'form1' : form1 })

def comment_view(request):
    if (request.method=="POST"):
        form2 = CraveReplyForm(request.POST, request.FILES)
        if form2.is_valid():
            reply = form2.save(commit=False)
            reply.person=request.user
            #reply.crave = request.user
            reply.save()
        else:
            messages.error(request, 'Please enter all required fields')

    else:                    
        form2 = CraveReplyForm()



    return render(request, "crave/comment.html", { 'form2' : form2 })

我的模板文件 crave.html 的内容:

<form class="horizontal-form" role="form" action="/crave/" method="post"  style="padding: 10px;">
           {% csrf_token %}
                <div class="form-group" >


                        <div class="col-sm-10">
                        {{ form1.post.label_tag }}{{ form1.post }} <br /><br>   
                        </div>
                        </div>      
                        <input type="submit" class="btn btn-success" value="crave" />
                    </form>

                    <form action="/crave/reply_get/">
                    <input type="submit">
        </form>

我的 comment.html 的内容:

<form class="horizontal-form" role="form" action="/crave/reply_get/" method="post"  style="padding: 10px;">
           {% csrf_token %}
                <div class="form-group" >
                        <div class="col-sm-10">
                        {{ form2.reply.label_tag }} {{ form2.reply }}   </br> </br>
                    </div>
                    </div>
                    <input type="submit" class="btn btn-success" value="reply" />
        </form>

当我点击 crave 按钮时,我想只保存第一个表单的数据,而不保存第二个表单的数据。这样评论就只会和相关的帖子有关。我使用了外键。但是在 "reply.crave = crave_made" 这一行我遇到了错误,我想从 create_view 视图中访问 crave_made。请帮帮我。

1 个回答

0

你的表单是从 UserCreationForm 这个表单派生出来的,所以要让它有效,里面也应该包含那个表单的字段。

不过我觉得你应该是想从 ModelForm 这个表单继承,而不是 UserCreationForm

所以你需要把你的代码改成这样:

class CraveDataForm(forms.ModelForm):
    class Meta:
        model = crave_data
        exclude=['date']

class CraveReplyForm(forms.ModelForm):
    class Meta:
        model = comments
        exclude=['date', 'crave']

撰写回答