Используйте pk из URL в форме django - PullRequest
0 голосов
/ 18 февраля 2020

В моем приложении django есть таблица, содержащая кнопку, которая перенаправляет вас на такую ​​форму:

<a href="{% url 'employee:delivered_docket_form' docket.pk %}" class="btn btn-primary">Create Delivered Docket</a>

Urls.py

path('delivered-docket/add/<int:pk>/', DeliveredDocketFormView.as_view(),
                                        name='delivered_docket_form')

Views.py

@method_decorator([login_required, employee_required], name='dispatch')
class DeliveredDocketFormView(CreateView):
    model = DeliveredDocket
    form_class = DeliveredDocketeditform
    template_name = 'packsapp/employee/docketDeliveredForm.html'

    def form_valid (self, form):
        product = form.save(commit=False)
        product.save()
        data = form.cleaned_data
        print("form data is ", data)
        print("pk is ",self.kwargs['pk'])
        messages.success(self.request, 'The Delivered Docket was created with success!')
        return redirect('employee:delivered_docket_table')

Я могу получить доступ к функции pk в представлениях с помощью self.kwargs['pk'], но как я могу получить к ней доступ в классе формы. Вот моя форма

Forms.py

class DeliveredDocketeditform(forms.ModelForm):
    class Meta:
        model = DeliveredDocket
        fields = '__all__'

То, что я хочу добавить в форму, выглядит примерно так:

class DeliveredDocketeditform(forms.ModelForm):
    class Meta:
        model = DeliveredDocket
        fields = '__all__'


    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['sender'].queryset = Warehouse.objects.id(id = ??)

Как мне получить pk к этому запрос ??

1 Ответ

1 голос
/ 18 февраля 2020

Вы можете переопределить метод get_initial в своем представлении, чтобы передать начальные данные в форму:

class DeliveredDocketFormView(CreateView):
    model = DeliveredDocket
    form_class = DeliveredDocketeditform
    template_name = 'packsapp/employee/docketDeliveredForm.html'

    def get_initial(self):
        initial = super().get_initial()
        initial['sender'] = Warehouse.objects.get(pk=self.kwargs['pk'])
        return initial
...