【发布时间】:2019-04-17 14:00:05
【问题描述】:
我正在尝试使用相同的视图来创建表单和更新任何对象。
我的代码如下,我尝试了很多方法都没有工作,因为我从表单中排除了 shof 并在 form.is_valid() 之后添加它会造成很多混乱。如果我更新它会创建新对象。我有两个 url,一个没有 ql(创建新),一个有 ql(更新现有),我有一个类 vdview,它提供 v.shof,需要以形式应用到 f.shop。请帮忙解决这个问题,
@csrf_protect
@login_required
def addmenu(request, qs, ql=None):
v = vdview(request, qs)
ctgobj = get_object_or_404(v.shopcategs, pk=ql) if ql else None # ctgobj = ShopCtg(shop=v.shof)
if ql:
form = ShopCtgForm(instance=ctgobj) # Tried ShopCtgForm(instance=ctgobj, data=request.POST)
else:
form = ShopCtgForm(data= request.POST)
if request.method == 'POST':
if form.is_valid():
f=form.save(commit=False)
f.shop = v.shof
f.save()
#form.save_m2m()
return redirect('vendor-shop', qs) #thing='%s added' %f.name)
else:
pass
#else:
# form = ShopCtgForm()
return render(request,'vendorshop.html', {'shop':v.shof, 'shopcategs':v.shopcategs, 'form': form,
'heading':'Create New Category', 'createcateg': 'createcateg', 'pkaddmenupk':'y' } )
【问题讨论】:
-
ql代表什么?即使ql不是 None,您也会获得新实例? -
更新和创建都失败了吗?什么是 v.shof?是
f.shopform.shop?你在尝试更新表单时忘记设置数据,应该是form = ShopCtgForm(instance=ctgobj, data=request.POST) -
抱歉,现在更新了。我将尝试使用 form = ShopCtgForm(instance=ctgobj, data=request.POST)。我会发布状态。
-
最后这也行不通。 ` def addmenu(request, qs, ql=None): v = vdview(request, qs) ctgobj = get_object_or_404(v.shopcategs, pk=ql) if ql else None if ql: form = ShopCtgForm(instance=ctgobj, data= request.POST) print(ql) else: form = ShopCtgForm(data= request.POST) if request.method == 'POST': if form.is_valid(): f=form.save(commit=False) f.shop = v.shof f.save() #form.save_m2m() return redirect('vendor-shop', qs) else: pass`
标签: django django-forms