我想编辑记录时遇到问题。
它确实编辑了所有内容,但是尝试添加get_or_create
,因此如果存在不创建,但它没有按预期工作。
有人能帮助我吗?
def edit(request, id):
models = [hotel, person]
for model in models:
try:
instance = model.objects.get(id=id)
if instance == hotel.objects.get(id=id):
form = hotelForm(request.POST or None, instance=instance)
if form.is_valid():
obj, created = hotel.objects.get_or_create(name=name)
if not created:
messages.error(request, 'error. Already exists')
else:
form.save()
messages.success(request, 'Success!')
return redirect('/')
except:
try:
if instance == person.objects.get(id=id):
form = personForm(request.POST or None, instance=instance)
if form.is_valid():
form.save()
messages.success(request, 'Sucess!')
return redirect('/')
except:
pass
return render(request , "edit.html", {'form': form})
请注意:
我的模型person
在没有get_or_create
的情况下正常工作,但如果我想在第一个模型hotel
中添加它,它就无法工作。
如何让它按预期工作?
答案 0 :(得分:3)
您的代码在几个方面没有意义。我将从最危险的
开始 try:
except:
pass
永远不要这样做。您必须始终捕获特定的异常并单独处理每个异常。在罕见的情况下,如果您别无选择,只能通过一个语句捕获所有异常,绝对必须记录它,以便您了解代码中发生的情况。
第二个主要问题是:
models = [hotel, person]
for model in models:
...
if instance == hotel.objects.get(id=id):
...
if instance == person.objects.get(id=id):
您假设酒店和对象具有相同的ID。一旦进入一个蓝色的月亮,你可能会得到这样一对纯粹的巧合。酒店和人的主要钥匙彼此完全没有关系。