Сбой modelform is_valid без установки form.errors - PullRequest
3 голосов
/ 24 июля 2010

Я использую модель для отображения только подмножества полей в модели. Когда форма отправляется, происходит сбой 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']

View

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())

1 Ответ

8 голосов
/ 24 июля 2010

Ваша форма не связана, потому что вы не передаете ей никаких данных.Вызов 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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...