Django Получить значение поля формы в представлении обновлений - PullRequest
0 голосов
/ 26 февраля 2019

Я использую представления на основе классов и хочу получить текущее значение заданного поля ward в методе get_context_data моего UpdateView.Я пытался использовать метод get, но он не работает.Вот мой метод:

def get_context_data(self, **kwargs):
    context = super(ApplicationUpdateView, self).get_context_data(**kwargs)
    context['money_per_ward'] = int(getattr(Allocation.objects.first(), 'amount_allocated') / 30)

    context['ward'] = self.request.POST.get('ward') # <-- This prints "None"
    return context

Мой полный UpdateView:

class ApplicationUpdateView(LoginRequiredMixin, SuccessMessageMixin, UpdateView):
    model = Application
    form_class = ApplicationForm
    success_message = "Details Updated Successfully"
    extra_context = {
        'title' : 'Edit Application Details'
    }




    def get_context_data(self, **kwargs):
        context = super(ApplicationUpdateView, self).get_context_data(**kwargs)
        context['money_per_ward'] = int(getattr(Allocation.objects.first(), 'amount_allocated') / 30)
        context['ward'] = self.request.POST.get('ward')
        return context

И мой urls.py:

path('apply/', default_views.ApplicationCreateView.as_view(), name='apply'),
path('applications/<int:pk>/update/', default_views.ApplicationUpdateView.as_view(), name='edit_application'),

и мой шаблон:

<form method="POST">
        {% csrf_token %}
        <fieldset class="form-group">
            {% if  title == 'Apply' %}
            <legend class="border-bottom mb-4">Apply For Bursary</legend>
            {% elif title == 'Edit Application Details' %}
            <legend class="border-bottom mb-4">Edit details for {{application.full_name}}
            </legend>
            {% else %}
            <legend class="border-bottom mb-4"></legend>
            {% endif %}
            <div class="row">
                <div class="col-md-6">
                    <h5 class="border-bottom mb-4">Personal Details</h5>
                    <div class="border-bottom mb-4">
                    {{ form.full_name|as_crispy_field }}
                    {{ form.gender|as_crispy_field }}
                    {{ form.parent_name|as_crispy_field }}
                    {{ form.contact|as_crispy_field }}
                    </div>

                    <h5 class="border-bottom mb-4">School Details</h5>
                    {{ form.category|as_crispy_field }}
                    {{ form.school_name|as_crispy_field }}
                    {{ form.adm_number|as_crispy_field }}
                    {{ form.year|as_crispy_field }}
                </div>
                <div class="col-md-6">
                    <h5 class="border-bottom mb-4">Location Details</h5>
                    {{ form.subcounty|as_crispy_field }}
                    {{ form.ward|as_crispy_field }}
                    {{ form.sublocation|as_crispy_field }}
                    <small class="text-muted">Money: {{money_per_ward}} {{ward}}</small>
                    {{ form.is_qualified|as_crispy_field}}

                </div>
            </div>

        </fieldset>
        <div class="form-group">
            <button class="btn btn-block btn-outline-info" name="submit" type="submit">
                {% if title == 'Apply' %}
                Submit Application
                {% else %}
                Update Details
                {% endif %}
            </button>
        </div>
    </form>

Есть ли способ получить доступ к текущему значению этого поля {{form.ward|as_crispy_field}}?

1 Ответ

0 голосов
/ 26 февраля 2019

Мой Плохой.Мне нужно было использовать только метод self.get_object().

Вот рабочее решение:

def get_context_data(self, **kwargs):
    context = super(ApplicationUpdateView, self).get_context_data(**kwargs)
    context['money_per_ward'] = int(getattr(Allocation.objects.first(), 'amount_allocated') / 30)
    context['ward'] = self.get_object().ward # <-- Now this works perfectly
    return context
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...