代码之家  ›  专栏  ›  技术社区  ›  FANCY_HOOMAN

Django要求可选表单字段错误

  •  0
  • FANCY_HOOMAN  · 技术社区  · 6 年前

    对于新读者:Nevervoner的解决方案解决了最初的错误,但照片上传仍然是必需的,并在表单中设置为false。py给了我一个多值错误。如果您能帮我选择,我们将不胜感激。


    我有一个模型和表格,可以上传图片和文本,也可以只上传文本。我的意图,实际上是在图片、文本或两者之间做出选择,如果有任何帮助,我将不胜感激,但我离题了。上传仅在包含图像时有效,如果只是文本,我会收到错误信息:

    The view lesyeux.views.posts didn't return an HttpResponse object. It 
    returned None instead.The view lesyeux
    

    我的模型是:

    class Post(models.Model):
        image = models.ImageField(upload_to='uploaded_images', blank=True, 
        null=True)
        text_post = models.CharField(max_length=1000)
        author = models.ForeignKey(User)
    

    我的表格是:

    class PostForm(forms.ModelForm):
        image = forms.FileField(label='Select an image file', 
        help_text='Please select a photo to upload')
        text_post = forms.CharField(help_text="Please enter some text.") 
        class Meta:
            model = Post
            fields = ('image', 'text_post',)
            exclude = ('author',)
    

    我的观点是:

    def posts(request, id=None):
        neighborhood = get_object_or_404(Neighborhood, id=id)
        form = PostForm()
        if request.method == 'POST':
            form = PostForm(request.POST, request.FILES)
            if form.is_valid():
                post = Post(image = request.FILES['image'])
                post = form.save(commit=False)
                post.author = request.user
                post = post.save()
                next = request.POST.get('next', '/')
                return HttpResponseRedirect(next)
        else:
            form = PostForm()
            posts = Post.objects.all().order_by('-id')
            return render(request, 'posts.html', context = {'form':form, 
            'posts':posts, 'neighborhood':neighborhood})
    

    我的表格是:

        <form id="PostForm" method="post" action="/view/{{ neighborhood.id }}/posts/" enctype="multipart/form-data">
    
            {% csrf_token %}
            {% for hidden in form.hidden_fields %}
                {{ hidden }}
            {% endfor %}
    
            {% for field in form.visible_fields %}
                {{ field.errors }}
                {{ field.help_text }}
                {{ field }}
            {% endfor %}
            <input type="hidden" name="next" value="{{ request.path }}">
            <input type="submit" name="submit" value="Post" />
        </form>    
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   neverwalkaloner    6 年前

    如果表单无效,视图不会返回响应。要修复它,请按如下方式重写视图:

    def posts(request, id=None):
        neighborhood = get_object_or_404(Neighborhood, id=id)
        form = PostForm()
        if request.method == 'POST':
            form = PostForm(request.POST, request.FILES)
            if form.is_valid():
                post = Post(image = request.FILES['image'])
                post = form.save(commit=False)
                post.author = request.user
                post = post.save()
                next = request.POST.get('next', '/')
                return HttpResponseRedirect(next)
        else:
            form = PostForm()  
        posts = Post.objects.all().order_by('-id')          
        return render(request, 'posts.html', context = {'form':form, 'posts':posts, 'neighborhood':neighborhood})