#django
Вопрос:
Допустим, у меня есть следующее мнение
def add_list(request):
user = request.user
if request.method =="POST":
instance = MyModel(user=user)
form = MyForm(instance = instance)
form.is_valid() #False
есть ли способ выяснить, какие поля «неправильные» и почему?
Я попробовал form.errors
, который вернулся {}
Комментарии:
1. Вы пытались
form.non_field_errors
увидеть ошибки, которые не связаны ни с какими полями?2. @Nimdeveloper: если форма не ограничена (путем передачи данных), форма недействительна, поэтому все и
.errors
т. Д. пусты.3. Это тоже Пусто
4. @WillemVanOnsem да, это имеет смысл.
Ответ №1:
A Form
( ModelForm
или «простой» Form
) допустим только в том случае, если (1) он ограничен; и (2) если не возникает ошибок проверки. Форма ограничена, если в нее передаются данные (обычно это первый названный параметр data
).
Чтобы сделать форму ограниченной, вы, таким образом, должны передать что-то data=…
параметру, это может быть пустой словарь или QueryDict
что-то подобное request.POST
.
Таким образом, мы можем, например, передать request.POST
(и request.FILES
) в качестве первых (двух) параметров:
def add_list(request):
if request.method =='POST':
instance = MyModel(user=user)
form = MyForm(request.POST, request.FILES, instance=instance)
if form.is_valid():
# … (likely form.save())
pass
Комментарии:
1. Дело в том,
request
что содержит данные, предоставленные пользователем, которые должны быть преобразованы перед добавлениемMyForm
вместе с некоторыми другими данными (я опустил это по соображениям ясности), поэтому данные запроса фактически не имеют никакого отношенияMyForm
. Мне все еще нужен запрос. ПОСЛЕ этого?2. @CutePoison: Форма действительна, если она ограничена и не содержит ошибок в полях. Форма ограничена , если вы передаете в нее данные, например
request.POST
, илиrequest.GET
(для поиска с запросом GET).3. Тогда мне нужно будет связать его с моими преобразованными данными, тогда я предполагаю (анализ данных-дикт вместо запроса.POST) ?
4.@CutePoison:
request.POST
являетсяQueryDict
, таким образом, словарным объектом, но вы можете работать с другими словарными (похожими) объектами.5. Не стесняйтесь добавлять к своему ответу, что форма должна быть привязана, иначе она не может быть действительной — тогда я приму ответ