繁体   English   中英

即使我设置null = True和blank = True,也会出现“此字段为必填”错误

[英]Getting “This field is required” error even though I set null=True and blank=True

我有一个供用户提交帖子的Post模型。 我为Postcontent字段赋予了blank=True属性。 但是由于某种原因,django告诉我仍然需要content form_post.errors如下:

<ul class="errorlist"><li>content<ul class="errorlist"><li>This field is required.</li></ul></li></ul>

这是我的代码:

楷模

class Post(models.Model):
    ...
    user = models.ForeignKey(User, blank=True, null=True)
    title = models.TextField(max_length=76)
    content = models.TextField(null=True, blank=True)
    category = models.CharField(max_length=20, choices=CATEGORY_CHOICES, default='1')

形式

class PostForm(forms.ModelForm):
    content = forms.CharField(widget=PagedownWidget)
    title = forms.TextInput(attrs={'placeholder': 'title'})

    class Meta:
        model = Post
        fields = [
            'title',
            'content',
            'category',
            'image',
            'id',
            'user'
        ]

意见

def post(request):
    allauth_login = LoginForm(request.POST or None)
    allauth_signup = SignupForm(request.POST or None)
    if request.user.is_authenticated():
        form_post = PostForm(request.POST or None, request.FILES or None)
        if form_post.is_valid():
            print('valid')
            instance = form_post.save(commit=False)
            instance.user = request.user

            category = form_post.cleaned_data['category']
            for a, b in CATEGORY_CHOICES:
                if a == category:
                    category = b
                    form_post.save()

            return HttpResponseRedirect('/%s' % category)
        else:
            print(form_post.errors)
            form_post = PostForm()

        context = {
            'allauth_login': allauth_login,
            'allauth_signup': allauth_signup,
            'form_post': form_post
        }

        return render(request, 'post.html', context)
    else:
        return HttpResponseRedirect("/accounts/signup/")

html

...
<form method="post" action="" enctype="multipart/form-data">{% csrf_token %}
<div class="submitContainer">
    <div class="article_title_div">
     {{ form_post.title|add_class:"article_title" }}
     </div>
    <div>
    </div>
        {{ form_post.category }}
    </div>
    <div class="submitButton">
        <button class="submitArticleSubmit" type="submit">Post</button>
</div>
</form>
...

知道为什么我会收到此错误吗?

这样做的原因是因为您要overriding the default model field contenttitle

虽然content存储在数据库中时可以为空,但是表单required它( content = forms.CharField(widget=PagedownWidget) )。

更改为content = forms.CharField(widget=PagedownWidget, required=False)以使其在提交表单时是可选的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM