我正在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>
答案 0 :(得分:0)
是的,有可能。
您需要将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)