Форма Django не заполняется данными POST
Я относительно новичок в Django, поэтому надеюсь, что это довольно простой вопрос. Я нахожу отладку сложной и, возможно, это часть моей проблемы.
Проблема: Форма Django, кажется, не заполняется данными из поста.
Summary: У меня есть 2 модели Entities и Breaks. Breaks имеет FK отношение к entity_id (не PK) на Entities модели.
Я хочу сгенерировать пустую форму для всех полей таблицы Breaks. Генерация базовой формы заполняет все пустые поля, но для FK генерирует выпадающий список всех PK таблицы Entities. Это не помогает, поэтому я исключил это в ModelForm ниже и попытался заменить списком всех entity_ids из Entities таблицы. Эта форма отображается так, как ожидалось.
class BreakForm(ModelForm):
class Meta:
model = Breaks
#fields = '__all__'
exclude = ('entity',)
def __init__(self, *args, **kwargs):
super(BreakForm, self).__init__(*args, **kwargs)
self.fields['entity_id'] = ModelChoiceField(queryset=Entities.objects.all().values_list('entity_id', flat=True))
Нижеприведенный FormView является cbv, вызываемым по URL. Если я заполню форму и для FK столбца entity_id выберу одно из значений, то форма не будет отправлена. По этому полю в шаблоне формы появляется следующее сообщение Выберите правильный выбор. Этот выбор не является одним из доступных вариантов.
class ContactFormView(FormView):
template_name = "breaks/test/breaks_form.html"
form_class = BreakForm
Мои первоначальные мысли были либо о том, что тип данных этого поля (string/integer) неверен, либо о том, что Django нужен PK строки в таблице Entities (по какой-либо причине).
Итак, я добавил функцию post в FormView и увидел, что request.body заполняется правильно. Однако я не могу понять, как заполнить это в ModelForm и сохранить в базе данных, или преодолеть проблему, упомянутую выше.
Любая помощь будет очень признательна
В Django объект запроса, передаваемый в качестве параметра вашему представлению, имеет атрибут "method", где задается тип запроса, и все данные, переданные через POST, могут быть доступны через request. POST-словарь. Представление отобразит результат работы формы входа в систему, размещенной через loggedin. html.
Я думаю, что ваша проблема состоит из двух частей, во-первых, неправильно отображается выпадающий список, а во-вторых, форма не сохраняется. Для первой проблемы вам не нужно делать никаких изменений в наборе запросов ModelChoiceField
, вместо этого добавьте to_field_name
:
class BreakForm(ModelForm):
class Meta:
model = Breaks
#fields = '__all__'
def __init__(self, *args, **kwargs):
super(BreakForm, self).__init__(*args, **kwargs)
self.fields['entity_id'] = ModelChoiceField(queryset=Entities.objects.all(), to_field_name='entity_id')
Во-вторых, если вы хотите сохранить форму, вместо FormView используйте CreateView
:
class ContactFormView(CreateView):
template_name = "breaks/test/breaks_form.html"
form_class = BreakForm
model = Breaks