首页 > 解决方案 > Django 自定义表单未在 html 模板上的 modelformset_factory 中加载

问题描述

我正在尝试在 modelformset_factory 中使用我的自定义表单,但是当我将 modelformset_factory 中的“form”属性设置为我的自定义表单时,没有显示任何内容。我查看了文档,但找不到导致我的自定义表单无法加载的原因。

这是视图:

@login_required
def post_create(request):
    data = dict()
    ImageFormset = modelformset_factory(Images,form=ImageForm,extra=4)
    if request.method == 'POST':
        form = PostForm(request.POST)
        formset = ImageFormset(request.POST or None, request.FILES or None)
        if form.is_valid():    
            post = form.save(False)
            post.author = request.user
            #post.likes = None
            post.save()
            for f in formset:
                try:
                    i = Images(posts=post, image=f.cleaned_data['image'])
                    i.save()
                except Exception as e:
                    break
            data['form_is_valid'] = True
            posts = Post.objects.all()
            posts = Post.objects.order_by('-last_edited')
            data['posts'] = render_to_string('home/posts/home_post.html',{'posts':posts},request=request)
        else:
            data['form_is_valid'] = False
    else:
        form = PostForm  
        formset = ImageFormset(queryset=Images.objects.none())     
    context = {
    'form':form,
    'formset':formset,
    }
    data['html_form'] = render_to_string('home/posts/post_create.html',context,request=request)
    return JsonResponse(data) 

这是我的自定义表单:

class ImageForm(forms.ModelForm):
    image = forms.FileField(
        label='',
        widget = forms.FileInput(
            attrs={
                'style':'display: none;',
                'class':'form-control',
                'required': False})) 
    class Meta:
        model = Images
        fields = ('image', )

这就是我用来加载表单集的内容:

{{ formset }}

提前感谢所有帮助!

标签: djangodjango-formsdjango-viewsdjango-templates

解决方案


我自己解决了这个问题,问题是我正在使用 display: none 在我的表单中!我只是删除了现在我的表格是:

class ImageForm(forms.ModelForm):
    image = forms.FileField(
        label='',
        widget = forms.FileInput(
            attrs={
                'class':'form-control',
                'required': False})) 
    class Meta:
        model = Images
        fields = ('image', )

推荐阅读