Модель Formset Проблема - PullRequest
0 голосов
/ 14 мая 2009

У меня есть модель, для которой нужно показать форму несколько раз. Я использовал его под набором модели. Кажется, у меня проблема с идентификатором этой модели, который также является первичным ключом модели.
Я заранее заполняю форму данными, которые хочу редактировать.
Но всякий раз, когда я нажимаю на кнопку «Отправить», она обновляет страницу с сообщением об ошибке «Идентификатор скрытого поля» с этим значением «Нет» уже существует.
Эта ошибка происходит специально для поля 'id', которое скрыто

<input type="hidden" id="id_form-0-id" value="2972" name="form-0-id"/>

Это фрагмент из шаблона. (Я получил это от firebug) В чем может быть проблема, поскольку форма недействительна? Я не могу сохранить данные.

ProfilesFormSet = modelformset_factory(Profile,exclude = ( <items spearated by commas>), extra=0) 
profile_form_set = ProfilesFormSet(queryset = Profile.objects.filter(userprofile=userprofile).order_by('-modified_on')) 

Это фрагмент кода.

Ответы [ 2 ]

1 голос
/ 15 мая 2009

Если вы используете PostgreSQL и любую версию Django до 1.1beta, и ваша модель не имеет определенного порядка по умолчанию, я думаю, вы, вероятно, видите ошибку, связанную с непоследовательным порядком объектов, возвращаемых из базы данных ( см. билеты Django Trac 9076 , 9758 , 10163 и другие).

Попробуйте установить порядок по умолчанию для модели:

class Meta:
    ordering = ('some_field',)

Посмотри, исправит ли это.

0 голосов
/ 15 мая 2009

Я считаю, что эта ошибка вызвана одной из следующих причин:

  • Объект формы Django, который вы используете внутри набора форм, не включает первичный ключ (id) модели. Однако, поскольку вы используете modelformset_factory, этого не должно быть (вы также не получите это сообщение об ошибке).

  • Форма HTML в вашем шаблоне не включает первичный ключ, даже как скрытое поле. Убедитесь, что в вашем шаблоне есть {{ form.id }} или что-то подобное внутри цикла {{ for form in formset }}.

В данный момент я не могу придумать больше причин, но я уверен, что все они будут связаны с формой, возвращаемой POST из клиента браузера, так или иначе отсутствует поле id.

...