如何解决如何为 post 方法命名大量动态输入字段 - Django
在我的网上商店中,我从两个不同的应用程序中获取所有产品和服务,并将它们列出来供用户制作他的心愿单。
每个产品或服务都显示在一个引导卡片中,其中包含一个用于产品数量的输入字段。
#views.py
def my_products(request):
ip_sensor = Ip_sensor.objects.all().order_by('title')
control_valves = ControlValves.objects.all().order_by('title')
context = {
'ip_sensor': ip_sensor,'control_valves': control_valves,}
return render(request,'users/basket/my_products.html',context)
然后在模板中,它们以这种方式显示:
<form method="post" id="add_to_wishlist" data-url="{% url 'my_products' %}">
{% csrf_token %}
{% if ip_sensor %}
{% for item in ip_sensor %}
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-12">
<p class="card-text text-center text-capitalize">{{ item.title }}</p>
</div>
<div class="col-12">
<div class="form-group">
<input type="hidden" name="tag" value="{{ item.type }}"> <!-- what to put in name field of this line -->
<input type="hidden" name="item_id" value="{{ item.id }}"> <!-- what to put in name field of this line -->
<label for="count" class="control-label">count</label>
<input type="text"
id="count"
name="count" <!-- what to put in name field of this line -->
placeholder="Count"
class="form-control"
autofocus/>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
{% endif %}
</form>
问题:
当我通过POST方式将每个产品或服务的数量返回给我的views.py
保存到他的wishlist时,我不知道如何区分返回值??
由于项目显示在 for 循环中,我想将每个选定项目分别保存在 WishListItem
对象(模型)中,我需要分别命名每张卡片的输入字段,但我不知道怎么做。
我可以这样保存每个项目:
if request.method == 'POST':
owner = request.user
count = request.POST.get('count')
tag = request.POST.get('tag')
object_id = request.POST.get('item_id')
wishlist = WishListItem(owner=owner,content_type=class_types[tag],object_id=object_id,tag=tag,count=count)
wishlist.save()
return redirect('my_products')
解决方法
当有多个同名输入时,request.POST
会列出所有这些输入元素的值。因此,您可以使用 request.POST.getlist('item_id')
获取所有项目 ID,它将返回包含所有 ID 的列表。在您的 html 中,您可以使用 id
作为 name
属性的一部分来命名所有其他输入,如下所示:
...
<input type="hidden" name="tag_{{ item.id }}" value="{{ item.type }}"> <!-- item id has become part of the input name -->
<input type="hidden" name="item_id" value="{{ item.id }}"> <!-- all item ids will be accessed as list in view -->
<label for="count" class="control-label">count</label>
<input type="text"
id="count"
name="count_{{ item.id }}" <!-- item id has become part of the input name -->
placeholder="Count"
class="form-control"
autofocus/>
...
在您看来,您可以像这样访问所有值:
...
for object_id in request.POST.getlist('item_id'): #this will contain a list with all item ids in it
count = request.POST.get('count_%s'%object_id) #as html inputs are named with ids as part of name you can access them
tag = request.POST.get('tag_%s'%object_id) #as html inputs are named with ids as part of name you can access them
wishlist = WishListItem(owner=owner,content_type=class_types[tag],object_id=object_id,tag=tag,count=count)
wishlist.save()
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。