Python Django:如何循环布尔字段并将all设置为false
因此,我有一个名为“order”的表,它有一个外键和表“store”。订单表的布尔字段默认设置为false。创建新订单时,我需要遍历与每个单独存储关联的布尔值,并将其他订单设置为false,将新订单设置为true。不确定如何为此创建for循环。首先,我尝试将其设置到视图中,但也许可以将其放入forms.py文件中?到目前为止,这是我的创建代码Python Django:如何循环布尔字段并将all设置为false,python,django,boolean,Python,Django,Boolean,因此,我有一个名为“order”的表,它有一个外键和表“store”。订单表的布尔字段默认设置为false。创建新订单时,我需要遍历与每个单独存储关联的布尔值,并将其他订单设置为false,将新订单设置为true。不确定如何为此创建for循环。首先,我尝试将其设置到视图中,但也许可以将其放入forms.py文件中?到目前为止,这是我的创建代码 def create(request): if request.POST: form = OrderForm(request.PO
def create(request):
if request.POST:
form = OrderForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/liquors/all')
else:
form = OrderForm()
args = {}
args.update(csrf(request))
args['form'] = form
return render_to_response('create_order.html', args)
根据要求提供的型号,除订购型号外,您不需要其他任何产品:
class Order(models.Model):
OrderID = models.AutoField(primary_key=True)
storeID = models.ForeignKey(Store)
DateCreated = models.DateField('Date Created', auto_now_add=True)
OrderName = models.CharField('Order Name', max_length=25 )
Active = models.BooleanField()
您必须
返回render\u to\u response('create\u order.html',args)
一次缩进。这样验证表单就不会受到影响。如果使用的是渲染
,则不需要使用csrf请求
<我认为没有必要在订单模型中使用OrderId,因为它是自动创建的。ie id
from django.shortcuts import render
from <appname>.models import Order,Store
def create(request):
if request.POST:
form = OrderForm(request.POST)
if form.is_valid():
#i just assume the storeid variable is exist in request.POST and it is ID.
store_data=Store.objects.get(id=request.POST['storeid'])
#here you might need to update the other orderform to false
Order.objects.filter(storeID=store_data).update(Active=False)
fo=Order(storeID=store_data,Active=True)
frm_order=OrderForm(request.POST,instance=fo)
frm_order.save()
return HttpResponseRedirect('/liquors/all')
else:
form = OrderForm()
return render(request,'create_order.html', {'form':form})
从django.exe导入渲染
从.models导入订单,存储
def创建(请求):
如有要求,请发送:
表单=订单(request.POST)
如果form.is_有效():
#我只是假设storeid变量存在于request.POST中,它是ID。
store\u data=store.objects.get(id=request.POST['storeid'])
#在这里,您可能需要将其他订单更新为false
Order.objects.filter(storeID=store\u data).update(Active=False)
fo=订单(storeID=存储\数据,活动=真)
frm_order=OrderForm(request.POST,instance=fo)
frm_订单保存()
返回HttpResponseRedirect(“/Liquirs/all”)
其他:
form=OrderForm()
返回呈现(请求,'create_order.html',{'form':form})
您可以使用order对象的元对象在字段中循环。前
for field in order._meta.fields():
if type(field) = django.db.models.fields.BooleanField:
setattr(order, field.name, True)
你能展示模型吗?如果你不提供模型,很难写出好的答案!!!我知道缩进,这就是它被复制和粘贴到这里的方式。重新调整一切,但我想我错过了那一次。无论如何,我会试试的。我忘了过滤活动订单。storeid并不像您所拥有的那样通过表单传递,但这很容易调整,谢谢。@RuSs没问题,很乐意帮助:)