Передача данных через формы Django - PullRequest
0 голосов
/ 21 мая 2018

Я чувствую, что упускаю очевидное, но не могу разобраться!

Я написал пользовательскую форму (для использования вне администратора django), которую я хочу использовать для создания / обновленияэкземпляры ряда экземпляров модели, а также содержат условные поля.Однако я, похоже, теряю свои условные данные.

На мой взгляд, я создаю экземпляр своей формы и передаю его в контекст запроса: -

view.py

form = MyForm(my_bool=True, pid=7)
render(request 'my_page.html', {'form': form})

forms.py

class MyForm(forms.Form):
    def __init__(self, *args, **kwargs):
        my_bool = kwargs.pop('my_bool', False)
        self.pid = kwargs.pop('pid', None)
        super(MyForm, self).__init__(*args, **kwargs)
        if my_bool:
            self.fields['textbox'] = forms.CharField(max_length=256)

Все отлично работает и форма отображается как и ожидалось.Теперь, когда я отправляю форму, она попадает ниже

view.py

 if request.method == 'POST':
        form = MyForm(request.POST)
        if form.is_valid():
        # Do Stuff

Моя проблема заключается в том, что объект формы в приведенном выше коде не содержит мои «текстовое поле» или «pid»поля, хотя форма, которую я представил, сделал.Я уверен, что все, что я делаю неправильно, чрезвычайно очевидно, но из-за большого количества поиска в Google я не могу найти простой способ создания формы, передать ей некоторые данные о том, какие поля я хочу показать, а также сказать идентификатормодель, которую я, в конце концов, хочу обновить, а затем получить доступ к информации, которую я передал в пост-части кода.

Часть # Do Stuff моего кода должна принимать 'pid', который я передалформу и использовать ее для получения продукта, например Product.objects.get (pk = pid), однако без сохранения pid в сеансе я не могу понять, как получить к нему доступ из обратной передачи.

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

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

Любая помощь будет в значительной степениценим, я обнаружил, что Django очень любезен ко всему, что я к нему так приложил, и это похоже на такой общий случай использования, что я просто должен делать это неправильно!

Я нахожусь наDjango v1.11 и Python v3.6.

1 Ответ

0 голосов
/ 21 мая 2018

вы передаете два аргумента для создания формы, а именно my_bool и pid.Но вы не передаете эти аргументы в представлении POST.В частности, my_bool имеет значение None, поэтому поле текстового поля никогда не генерируется.Изменение

form = MyForm(request.POST)

на

form = MyForm(request.POST, my_bool=True, pid=7)

должно помочь.

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