2011-01-18 5 views
0

У меня есть форма, которая состоит из ответа для каждой записи в другой модели. Во время создания формы ответ на каждый элемент может существовать или не существовать. Мне нужна форма, которая позволяет мне обновлять ответ, если он существует, и создавать его с данными сообщения формы, если он не существует.Django ModelForm Создание после создания формы

В настоящее время я перебор диапазона и создание своих форм с почтовыми данными:

forms = [SpecialNoteForm(request.POST, prefix=str(x),) for x in rang(1,3)] 

Я делаю это, потому что я не знаю, как еще получить доступ к данным формы чище для того, чтобы идентифицировать объект, с которым должна быть создана эта форма. Я пытался сделать что-то вроде этого после того, как список форм был создан потому, что я могу получить доступ к форме данных:

for form in forms: 
      try: 
       instance = SpecialNote.objects.get(flag=form["flag"].data, host=form["host"].data) 
       form.instance = instance 
       form.save() 

Ошибки на форме упорствовать после того, как я делаю это, однако. Мне нужен способ доступа к данным, которые мне нужны, чтобы создать экземпляр объекта во время создания формы или способ переоценить форму после того, как я прикрепил к ней экземпляр.

EDIT

Я столкнулся с той же проблемой, с модельным FormSets как я сделал с моим первоначальным подходом - я не знаю, как создать экземпляр формы в то же время позволяя intial значения на формах которые не имеют экземпляра. Я не хочу, чтобы создать все экземпляров модели, прежде чем руки, потому что она импортировать или нет пользователь представил их с необходимыми заполненными полями

Мой текущий подход по-прежнему использует типовые формы:.

forms = [] 
for n in form_range(request.POST): # calculates number of forms based on post data 
    try: 
     instance = SpecialNote.objects.get(flag=request.POST.get('%s'%n+'-flag'), host=request.POST.get('%s'%n+'-host')) 
    except: 
     instance = None 
    forms.append(SpecialNoteForm(request.POST, prefix=str(n), instance=instance)) 
    for form in forms: 
     if form.is_valid(): 
      form.save() 

Таким образом, проблема с наборами форм заключается в том, что я не знаю, как правильно создавать формы без необходимости их проверки, то есть уже в базе данных. Проблема с использованием регулярных форм моделей и префикса заключается в том, что получение объектов, которые мне нужны для их создания, беспорядочно (как вы можете видеть из моего текущего подхода). Я ищу решение любой из этих двух проблем.

ответ

0

Несколько идентичных форм на одной странице - это то, что model formsets для. Они должны заботиться обо всех этих проблемах.

+0

Я просматриваю документацию. Это кажется достаточно простым, если все формы, которые я хочу отображать, являются объектами в модели уже и, следовательно, доступны для запросов. У меня есть начальные значения формы списка, некоторые из них представляют объекты модели (следовательно, проблемы с экземпляром), но некоторые из них не являются. Есть идеи? – freb

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