Django Formset.is_valid () переставший работать для дополнительных форм

В C ++ директива include скопирует и вставит файл заголовка в ваш исходный код на этапе предварительной обработки. Следует отметить, что заголовочный файл обычно содержит функции и классы, объявленные в пространстве имен. Например, заголовок <vector> может выглядеть примерно так:

namespace std {
    template <class T, class Allocator = allocator<T> > class vector;
    ...
} 

Предположим, вам нужно определить вектор в вашей основной функции, вы делаете #include <vector> и у вас есть фрагмент кода выше в вашем коде сейчас:

namespace std {
    template <class T, class Allocator = allocator<T> > class vector;
    ...
}
int main(){
   /*you want to use vector here*/
}

Обратите внимание, что в вашем коде векторный класс все еще находится в пространстве имен std. Однако ваша основная функция находится в пространстве имен по умолчанию global, поэтому простое включение заголовка не сделает векторный класс видимым в пространстве имен global. Вы должны либо использовать using, либо сделать префикс, например, std::vector.

15
задан Andriy Drozdyuk 1 June 2009 в 13:11
поделиться

2 ответа

Спасибо, Карл, вы привели меня к обнаружению корня моей проблемы.

При создании формы с обязательным полем выбора мы должны установить начальное значение , иначе форма будет учитывать это поле изменено .

Итак, для такой формы:

class SomeForm(forms.Form):

    A = 0
    B = 1
    C = 2
    D = 3

   choices = ((A, 'Aah'), (B, 'Baa'), (C, 'Caa'), (D, 'Daa'))

    # This is a required choice field
    pickme = forms.ChoiceField(choices=choices)

мы делаем это:

pickme = forms.ChoiceField(choices=choices, initial=A)

Затем, когда набор форм проверяет дополнительную форму, он увидит, что pickme имеет начальное значение A, и теперь это A также и будет считать его неизменным.

22
ответ дан 1 December 2019 в 01:53
поделиться

Это необычное поведение наборов форм. Наборы форм передают empty_permitted = True для всех «дополнительных» форм , а форма с empty_permitted, которая не была изменена, всегда должна проходить проверку . Обратите внимание, что это прекрасно работает в администраторе Django (если вы используете встроенные строки).

Вы должны делать что-то еще в своем коде, что где-то нарушает это поведение. Разместите полный код соответствующей формы?

10
ответ дан 1 December 2019 в 01:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: