表单集合对象 - 对象没有'fields'属性

4 投票
1 回答
3338 浏览
提问于 2025-04-19 04:27

出现了一个错误,提示“AddVideoFormFormSet”对象没有“fields”这个属性。这里的Blogpost是指向Video的外键。我需要让用户能够将视频添加到他们的博客文章中,但现在这个表单组却允许用户将视频添加到任何博客文章里。有没有什么想法?

views.py

@login_required
def addvideo(request):
    user = request.user
    theform = AddVideoForm
    UploadFormSet = formset_factory(theform, extra=1) 
    if request.method == "POST":
        formset = UploadFormSet(request.POST)
        if formset.is_valid() :
            for form in formset.cleaned_data:
                    video = form['video']
                    title = form['title']
                    blogpost = form['blogpost']
                    description = form['description']
                    video = Video(
                        title = title,
                        video= video,
                        blogpost=blogpost,
                        description=description
                        )
                    video.user = request.user
                    video.save()

            return HttpResponseRedirect("/%s/%s/" % (user, blogpost.slug))

    else:
        formset = UploadFormSet()
        formset.fields['blogpost'].queryset = Blogpost.objects.filter(user=user)

    return render_to_response('video/add_video.html', dict(formset=formset), context_instance=RequestContext(request))

forms.py

from django import forms
from main.models import Blogpost
from .models import *

class AddVideoForm(forms.ModelForm):           
    class Meta:
        model   = Video
        fields = ['title', 'blogpost', 'video', 'description']

1 个回答

6

一个表单集合(FormSet)包含了多个表单。你可以尝试把:

formset.fields['blogpost'].queryset = Blogpost.objects.filter(user=user)

改成:

for form in formset:
    form.fields['blogpost'].queryset = Blogpost.objects.filter(user=user)

这样就应该可以了。

撰写回答