modelform失败is_valid没有设置form.errors

jam*_*ida 3 django django-models django-forms

我正在使用模型来仅显示模型中的字段的子集.提交表单时,form.is_valid()失败,但form.errors为空.我不想在这里显示我的所有代码,但下面是一个示例:

模型和形式

class Videofiles(models.Model):
    active = models.CharField(max_length=9)
    filenamebase = models.CharField(max_length=180, primary_key=True, db_column='FilenameBase')
    program = models.CharField(max_length=60, db_column='Program') 
    displayname = models.CharField(max_length=150, db_column='DisplayName') 
    description = models.TextField(db_column='Description', blank=True) 
    tagskeywords = models.TextField(db_column='TagsKeywords', blank=True) 

    class Meta:
        db_table = u'legacyTable'

class VideoFilesForm(ModelForm):
    filenamebase = forms.CharField(max_length=30)
    displayname = forms.CharField(max_length=30)
    description = forms.CharField(max_length=30, required=False)
    tagskeywords = forms.CharField(max_length=60, required=False)

    class Meta:
        model=Videofiles
        fields=['filenamebase','displayname','description','tagskeywords']
Run Code Online (Sandbox Code Playgroud)

视图

def editClip(request, clipId):
    clip = Videofiles.objects.get(filenamebase=clipId)
    form = VideoFilesForm(instance=clip)
    if request.method == 'POST':
        if 'save' in request.POST:
            if form.is_valid():
                form.save()
            else:
                print form.errors
    return render_to_response('legacyDB/edit_clip.html',locals())
Run Code Online (Sandbox Code Playgroud)

Ala*_*air 8

您的表单未绑定,因为您没有向其传递任何数据.调用is_valid未绑定的表单将始终返回False,并显示空错误(请参阅表单api docs).

您的视图应如下所示:

def editClip(request, clipId):
    clip = Videofiles.objects.get(filenamebase=clipId)
    if request.method == 'POST':
        # create bound form with input from request.POST
        form = VideoFilesForm(request.POST, instance=clip)
        if 'save' in request.POST:
            if form.is_valid():
            form.save()
        else:
            print form.errors
    else:
        # create unbound form to display in template
        form = VideoFilesForm(instance=clip)
            return render_to_response('legacyDB/edit_clip.html',locals())
Run Code Online (Sandbox Code Playgroud)