Django ModelForm не проходит проверку без ошибок

хорошо, я смотрел на это в течение нескольких часов, пытаясь понять, что происходит, безрезультатно. Я пытаюсь создать ModelForm, используя ключевое слово 'instance', чтобы передать ему существующий экземпляр модели, а затем сохранить его. Вот модель (значительно удаленная от оригинала в моих попытках определить причину этой проблемы):

class TempRuleFieldForm(ModelForm):
    class Meta:
        model = RuleField

и вот код, который я запускаю:

>>> m = RuleField.objects.get(pk=1)
>>> f = TempRuleFieldForm(instance=m)
>>> f.is_valid()
False

объектной модели (m выше) действительно, и это экономит просто отлично, но форма не будет проверять. Теперь, насколько я могу судить, этот код идентичен примеру Django docs, найденному здесь:http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method, хотя, очевидно, я что-то упускаю. Я был бы очень признателен, если бы свежий взгляд сказал мне, что я ошибся.

спасибо

3 ответов


обратите внимание, что ваша ссылка не называет f.is_valid(), Он просто сохраняет напрямую. Это может быть немного вводит в заблуждение.

дело в том, что создание экземпляра формы только с


Если u все еще хочет проверить объект, который был в базе данных, вы можете сначала сериализовать его, а затем создать форму с ним.

from django.utils import simplejson
from django.core.serializers import serialize

(...)

fields_dict = simplejson.loads(serialize('json', [obj]))[0]['fields']
form = forms.MyForm(fields_dict)
if form.is_valid

Это, вероятно, не лучший способ сделать это, но единственный, который я нашел, чтобы получить связанную форму из модели. Мне это нужно, потому что я хочу проверить текущие данные в базе данных. Я создаю вопрос, так как я не думаю, что это лучший способ сделать это:

преобразование свободной форме с привязкой один?


Это не решение для OP, но это для заголовка сообщения, который довольно высок в Google. Так что я все равно отправлю его, из здесь:

Если вы уже даете запрос.Сообщение в форму с помощью request.POST or None, но он по-прежнему недействителен без ошибок, проверьте, что нет никакого перенаправления. Перенаправление теряет ваши данные POST, и ваша форма будет недействительной без ошибок, потому что она несвязана.