Передача и доступ к значению в форме Django - PullRequest
1 голос
/ 09 июня 2019

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

views.py

class ObjectUpdateView(UpdateView):

    template_name = 'manage/object_form.html'
    form_class = ObjectEditForm
    def get_success_url(self):
        #...
    def form_valid(self, form):
        return super(ObjectUpdateView, self).form_valid(form)
    def get_object(self):
        return get_object_or_404(Room, pk=self.kwargs['object_id'])
    def get_form_kwargs(self, **kwargs):
        objectid = self.kwargs['object_id']
        object = Object.objects.get(id = objectid)
        container = object.container
        kwargs['container_id'] = container.id
        return kwargs

forms.py

class ObjectEditForm(forms.ModelForm):
 class Meta:
     model = Object
     fields = ['TestField']

 def __init__(self, *args, **kwargs):
     super(ObjectEditForm, self).__init__(*args, **kwargs)
     self.Container_id = kwargs.pop('container_id')

form_page.html

{{fomr.kwarg.Container_id}}

Как выЯ вижу, что я хотел бы получить доступ к Container_id значению в моем form_page.html.К сожалению, там ничего нет.Что я также заметил, что с __init__ мне пришлось добавить, теперь значения в моей форме пустые.До того, как я добавил __init__ все значения были правильно переданы (ну, кроме Container_id).

Не могли бы вы порекомендовать, как я могу передать такое значение для доступа в шаблоне формы?

1 Ответ

1 голос
/ 09 июня 2019

Вы можете сделать это с помощью:

{{ <b>form.Container_id</b> }}

В вашей форме вы должны сначала вытолкнуть container_id из kwargs, например:

class ObjectEditForm(forms.ModelForm):

    class Meta:
        model = Object
        fields = ['TestField']

    def __init__(self, *args, **kwargs):
        # first pop from the kwargs
        self.Container_id = kwargs.pop('container_id', None)
        super(ObjectEditForm, self).__init__(*args, **kwargs)

Используйте контекст над формой

При этом немного странно, что вы передаете это в форму, а не добавляете это к данным контекста. Вы можете упростить свой взгляд до:

class ObjectUpdateView(UpdateView):

    template_name = 'manage/object_form.html'
    pk_url_kwarg = <b>'object_id'</b>
    form_class = ObjectEditForm

    def get_success_url(self):
        #...

    def get_context_data(self, **kwargs):
        objectid = self.kwargs['object_id']
        object = Object.objects.get(id = objectid)
        context = <b>super().get_context_data()</b>
        context.<b>update(container_id=object.container_id)</b>
        return context

Django автоматически выбирает отдельный элемент на основе pk_url_kwarg [Django-doc] . Вам нужно только установить его правильно, так что здесь это object_id.

В этом случае мы можем просто сделать это с помощью:

{{ <b>container_id</b> }}

и вам не нужно хранить это в форме.

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