2012-01-24 3 views
5

Я хочу иметь связанную форму от объекта, чтобы использовать метод is_valid. Причина в том, что у меня есть несколько старых данных, которые я хочу, чтобы пользователи исправлялись в соответствии с новыми правилами проверки. Затем я хочу повторно использовать код чистых методов в моей форме.Преобразование несвязанной формы в связанную?

Я в конечном итоге сериализации мой ответ:

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 

Это работает, но это не кажется очень Djangish. Кроме того, это кажется общей проблемой, поэтому я искал лучший способ сделать это.

Согласно документации переводит данные из несвязанных к несвязанному не должен произойти: https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method Однако, это было бы самым простым решением для меня.

+0

Скажите мне, если я получил это право: У вас есть старые данные где-то и так как это была сохранена, правила проверки изменились. Теперь вы хотите использовать ModelForm для повторной проверки старых данных и отображения ошибок пользователю? – Martin

+0

Откуда: obj? Это поможет определить, что здесь происходит. –

+0

Точно @Penthi. Я думаю, что ооглес дал мне то, что я ищу. Спасибо –

ответ

11

Функция Django django.forms.models.model_to_dict, которая преобразует ваш экземпляр существующей модели в словарь данных, подходящих для привязки к ModelForm.

Это, вероятно, было бы более эффективным и, безусловно, более «Djangish», чем сериализация и неэтеризация объекта.

И если вы также создаете форму с ключевым словом instance, она будет знать, что обновляет существующую запись при ее сохранении.

Итак:

from django.forms.models import model_to_dict 

... 

fields_dict = model_to_dict(obj) 
form = forms.MyForm(fields_dict, instance=obj) 
+1

Спасибо! Это то, что я искал. –

Смежные вопросы