2017-04-03 85 views
0

我有用于提交帖子的用户的Post模型。我已经给出content字段Post属性blank=True。但由于某种原因Django告诉我content仍然是必需的。 form_post.errors打印此:尽管我设置了null = True并且空白= True,但获取“此字段是必需的”错误

<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> 
... 

任何想法,为什么我得到这个错误?

+0

设置完'blank = True'和'null = True'后,你有'./manage.py makemigrations'和'./manage.py migrate',不是吗? –

+0

是的我已经完成了两个 – Zorgan

+0

这是因为你正在重写'PostForm'内的'content'('content = forms.CharField(widget = PagedownWidget)',在其中放置一个'required = False'。 –

回答

1

原因是因为你是​​。 contenttitle

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

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

相关问题