我尝试制作一个django应用程序来创建账单。
我有两张桌子(比尔,送货) 一项法案最多可以交付5份。
现在我想要一张账单和一份送货单。要添加或删除交付,我想要一个按钮。
我正在使用基于类的视图。 如何在django中实现这一点?
我找到了django-extra-views,但我无法使用它。 我也看到了这个链接here,但这不是基于动态和动态的视图。
models.py
class Bill(models.Model):
company = models.ForeignKey(Bioenergie)
customer = models.ForeignKey(Customer)
price = models.DecimalField(max_digits=5,decimal_places=2)
bill_number = models.CharField(max_length=10, null=True)
delivery_date = models.DateField()
date = models.DateField(null=True)
class Delivery(models.Model):
billing_choises = (('1', 'Menge'),
('2', 'Gewicht/Feuchtigkeit')
)
option = models.CharField(choices=billing_choises, default=1, max_length=20)
amount = models.PositiveIntegerField(blank=True, null=True)
humidity = models.SmallIntegerField(blank=True, null=True)
weight = models.DecimalField(blank=True, null=True, decimal_places=2, max_digits=5)
bill = models.ForeignKey(Bill)
蓝色:表格 灰色:Buttoms
答案 0 :(得分:4)
你的问题有两个:
嗯...
通常这包括旧式(基于函数的)视图,因为基于类的视图不支持多于一个Form,也不支持FormSets,更不用说一起了。一个人可以拿,比如说,UpdateView,然后“手动”让它处理一个FormSet,但这只是丑陋的,在这种情况下,最好采用旧式的观点,恕我直言。
但是!感谢AWESOME django-extra-views,我们可以做这样的事情:
<强> forms.py:强>
from extra_views import InlineFormSet
class DeliveryInlineFormSet(InlineFormSet):
model = Delivery
extra = 2 # we'll need to make it "0" for the JS later on
<强> views.py:强>
from extra_views import CreateWithInlinesView, UpdateWithInlinesView
class CreateBillView(CreateWithInlinesView):
model = Bill
inlines = [DeliveryInlineFormSet, ]
success_url = reverse_lazy('bills')
class UpdateBillView(UpdateWithInlinesView):
model = Bill
inlines = [DeliveryInlineFormSet, ]
success_url = reverse_lazy('bills')
<强> bill_form.html:强>
<form method="POST" action="">
{{ form }}
{% for formset in inlines %}
<hr />
{# we're going to take advantage of the fact that we know there is only one inline #}
<h3>Deliveries</h3>
{{ formset.management_form }}
{% for subform in formset %}
<div class="subform">
{{ subform }}
</div>
{% endfor %}
{# we'll add some JS here #}
{% endfor %}
<div>
<hr />
{% csrf_token %}
<input type="submit" value="Save" name="save" />
</div>
</form>
就是这样,一个工作的非JS Form + FormSet创建并更新View。
有一些旧的项目,但它仍然有效:django-dynamic-formset
要让它发挥作用:
extra = 0
{# we'll add some JS here #}
,并将其替换为:
<script type="text/javascript">
$(function(){
$('.subform').formset({
prefix: '{{ formset.prefix }}'
});
});
</script>
Tadaaa!剩下要做的就是添加一些CSS ...
答案 1 :(得分:0)
您可以使用javascript
在模板中实现此目的希望这会有所帮助: http://sunnyarorablog.wordpress.com/2014/04/07/create-dynamic-forms-using-django-and-javascript/