在基于类的视图中使用url参数设置窗体字段

2024-09-30 22:21:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在django应用程序中创建表单。我的应用程序有一个用户,一个用户可以有很多交易,一个交易可以有很多销售。我正在尝试创建一个表单,将销售添加到数据库中。我试图在URL(transaction\ 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>


Tags: 用户divform视图id应用程序url表单
1条回答
网友
1楼 · 发布于 2024-09-30 22:21:59

是的,这是可能的。你知道吗

您需要将ModelFormCreateView一起使用。带有SaleCreateForm类的SaleCreateView应该如下所示:

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)

这是一个step by step tutorial。你知道吗

相关问题 更多 >