如何解决django 模型表单集工厂如何编写{{ form.field }}
所以对于表单,如果你在forms.py中有quantity = IntegerField(),那么在html文件中你可以写{{ form.quantity }}来获取数量的输入。你怎么能对modelformset_factory做同样的事情?
#views.py
#for showing items
if (Items.objects.filter(item_category="Produce").exists()):
produce = Items.objects.filter(item_category="Produce",show=True,quantity__gte=1)
if (Items.objects.filter(item_category="Grains").exists()):
grains = Items.objects.filter(item_category="Grains",quantity__gte=1)
if (Items.objects.filter(item_category="Protein/Dairy").exists()):
protein_dairy = Items.objects.filter(item_category="Protein/Dairy",quantity__gte=1)
if (Items.objects.filter(item_category="extras").exists()):
extras = Items.objects.filter(item_category="extra items",quantity__gte=1)
#playing with formset
form_extras = Items.objects.filter(show=True).count()
formset = modelformset_factory(Cart,form=CustomerOrderForm,extra=form_extras)
form = formset(queryset=Items.objects.none())
if request.method == 'POST':
form = formset(request.POST)
#work on this
if form.is_valid():
print("is valid")
form = formset(request.POST)
instances = form.save(commit=False)
for instance in instances:
#item previously in cart
if (Cart.objects.filter(username=request.user,item_name=form.cleaned_data.get('item_name')).exists()):
cart_instance = Cart.objects.get(username=request.user,item_name=form.cleaned_data.get('item_name'))
cart_instance.quantity = cart_instance.quantity + form.cleaned_data.get('quantity')
cart_instance.save()
else:
#item never in cart,create new instance
item_instance = Items.objects.get(item_name=form.cleaned_data.get('item_name'))
Cart.objects.create(username=request.user,item_name=form.cleaned_data.get('item_name'),weight=item_instance.weight,quantity=form.cleaned_data.get('quantity'),description=item_instance.description,image=item_instance.image,price=item_instance.price,storage_type=item_instance.storage_type,item_category=item_instance.item_category,limit=item_instance.limit,)
timestamp = datetime.date.today()
messages.success(request,"Sucessfully added your items to your cart! " + str(timestamp))
return redirect('/')
else:
print("form not valid for cart")
form = formset()
user_produce_points = request.user.profile.produce_points
user_grain_points = request.user.profile.grain_points
user_protein_dairy_points = request.user.profile.protein_dairy_points
user_extras_points = request.user.profile.extra_items_points
Home.html:
#home.html
<form method="POST">
{% csrf_token %}
{{ form.management_form }}
{{form.as_p}}
<div class="row">
{% for item in produce %}
<div class="card" style="width: 18rem;">
<img src="/media/{{ item.image }}" class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title text-center">
<b>{% if item.storage_type == "Frozen" %}
Frozen
{% endif %}
{{ item.item_name }} ({{ item.weight }} oz)</b></h5>
<h6 class ="card-title text-center" style="color:green;font-size: 16px;"><b>{{ item.price }} Produce
{% if item.price < 2 %}
Point
{% else %}
Points
{% endif %}
</b></h6>
<p class="card-text">{{ item.description }}</p>
<br><br>
<div class="input-quantity">
<input type="hidden" name="form-{{forloop.counter}}-item_name" value="{{ item.item_name }}">
{{form.quantity}}
{{form.item_name}}
{{form.field}}
Quantity: <input style="max-width:3em;" type="number" name="form-{{forloop.counter}}-quantity" pattern="[0-9]{3}" min="0" max="{{ item.limit }}">
</div>
</div>
</div>
{% endfor %}
<br>
<button type="submit" style="height:38px;" class="btn btn-primary btn-lg sharp" type="button">Add to Cart</button>
</form>
解决方法
Django Docs 总是有一个很好的例子,它总是对我有帮助。
遗憾的是,您没有发布(我假设您没有发布)视图函数的其余部分,所以我只能猜测模板中的 DELETE deneme
PUT deneme
{
"settings": {
"analysis": {
"analyzer": {
"tab_delim_analyzer": {
"type": "custom","tokenizer": "standard","filter": [
"lowercase","asciifolding"
]
}
}
}
},"mappings": {
"properties": {
"Title": {
"type": "text","analyzer": "tab_delim_analyzer"
}
}
}
}
指的是在视图中创建的表单集,即通过。如果是这样,您需要先创建 for 循环,然后才能在 form
中访问它。你可以像这样创建它:
name="form-{{forloop.counter}}-item_name"
在您的模板中,您还有 {% for form_line in form %}
<!--form_line rendering you have-->
<p>Form #{{ forloop.counter }}</p>
{{ form_line.quantity }}
{{ form_line.item_name }}
{{ form_line.field }}
{% endfor %}
变量。我不确定那是什么意思,也许是因为我看不到整个视图函数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。