Skip to main content
 首页 » 编程设计

python之django project_form 无效

2024年12月31日20三少

我一直在尝试实现一种发布项目帖子的方法,用户可以在其中上传多张图片。多张图片上传有效,但发布帖子本身无效。

我不确定如何处理 project_form。

即使字段具有正确的值也是无效的。

我的代码是:

View .py

class CreateProjectsView(View): 
    def get(self, request): 
        p_photos = P_Images.objects.all() 
        #project_form = ProjectsForm(initial=self.initial) 
        project_form = ProjectsForm 
        context = { 
            'p_photos': p_photos, 
            'project_form': project_form, 
        } 
        return render(self.request, 'projects/forms.html', context) 
 
    def post(self, request): 
        project_form = ProjectsForm(request.POST or None, request.FILES or None) 
        p_formset = P_ImageForm(request.POST, request.FILES) 
 
        # Checks if the project_form is valid before save 
        if project_form.is_valid(): 
            instance = project_form.save(commit=False) 
            instance.user = request.user 
            instance.save() 
 
        # Checks if multiple image upload is valid before save 
        if p_formset.is_valid():  
        #if project_form.is_valid() and p_formset.is_valid():    
            #instance = project_form.save(commit=False) 
            #instance.user = request.user 
            #instance.save() 
            images = p_formset.save(commit=False) 
            images.save() 
 
            data = { 
                'is_valid': True,  
                'name': images.p_file.name,  
                'url': images.p_file.url 
            } 
 
        else: 
            data = { 
                'is_valid': False, 
            } 
 
        return JsonResponse(data) 

表单.html

<form action="{% url 'create_post:retrieve_projects' %}" method="POST" enctype="multipart/form-data"> 
 
    {% csrf_token %}   
 
    {% for hidden in project_form.hidden_fields %} 
    {{ hidden }} 
    {% endfor %} 
 
    {% for field in project_form %} 
    {{ field.errors }} 
    {{ field }} <br /> 
    {% endfor %} 
 
    <input type="submit" value="OK"> 
</form> 

请您参考如下方法:

如果表单无效,您应该为用户提供更正错误并重新提交表单的方法。也许是这样的:

    if project_form.is_valid(): 
        instance = project_form.save(commit=False) 
        instance.user = request.user 
        instance.save() 
 
    else: 
        return render(request, 'project_form.html', {'form': project_form})