Django ModelForm не проходит проверку без ошибок - PullRequest
10 голосов
/ 06 октября 2010

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

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

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

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

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

Спасибо

Ответы [ 3 ]

21 голосов
/ 06 октября 2010

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

Дело в том, что создание экземпляра формы только с параметром instance, но без data не делает не привязкой ее к данным, и поэтому форма недопустима. Вы увидите, что f.is_bound является ложным.

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

3 голосов
/ 25 января 2012

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

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

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

Преобразовать несвязанную форму в связанную?

0 голосов
/ 07 января 2016

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...