Использование параметра url в представлении на основе классов для установки поля формы - PullRequest
0 голосов
/ 23 апреля 2019

Я создаю форму в моем приложении django. У моего приложения есть пользователь, у пользователя может быть много транзакций, а транзакция может иметь много продаж. Я пытаюсь создать форму для добавления продаж в БД. Я пытаюсь передать параметр в URL-адресе (action_id) и использовать его в представлении на основе классов Django CreateView, чтобы установить соответствующее поле (внешний ключ) в форме. Можно ли это сделать, и если да, то как я могу это применить.

Представление на основе классов ниже

class SaleCreateView(CreateView):
    model = Sale
    fields = ['amount_sold', 'total_price_sold', 'note']

    def form_valid(self, form):


URL ниже

path('sale/new/<int:pk>', SaleCreateView.as_view(), name='sale-create'),

Ссылка ниже

{% url 'sale-create' transaction.id %}

Форма продажи ниже

<div>
    <form method="POST">
        {% csrf_token %}
        <fieldset class ="form-group">
            <legend class="border-bottom mb-4">Enter Sale</legend>
            {{ form|crispy }}
        </fieldset>
        <div class="form-group">
            <button class ="btn btn-outline-info" type="submit">Enter</button>
        </div>
    </form>
</div>

1 Ответ

0 голосов
/ 23 апреля 2019

Да, это возможно.

Вам нужно будет использовать ModelForm с CreateView.Ваши SaleCreateView с SaleCreateForm классами должны выглядеть следующим образом:

class SaleCreateView(CreateView):
    model = Transaction
    fields = ['amount_sold', 'total_price_sold', 'note']
    form_class = SaleCreateForm

    def get_initial(self, *args, **kwargs):
            initial = super(SaleCreateView, self).get_initial(**kwargs)
            return initial

class SaleCreateForm(forms.ModelForm):
    class Meta:
        model = Sale
        exclude = ('transaction',)

    def __init__(self, *args, **kwargs):
        self.transaction = kwargs.pop('transaction')
        super(SaleCreateForm, self).__init__(*args, **kwargs)

Вот пошаговое руководство .

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