我正在努力找到正确的解决方案,我正在努力做到这一点,并且非常感谢一些帮助.
目前,我有一个工作系统,它从数据库中获取"特殊"并在浏览器中显示它.用户可以在浏览器中编辑"特殊"并将其提交给数据库.然后向用户显示该更改.
问题是如果数据库中没有预先存在的"特殊",则"特殊"将不会更新.在我的views.py中,我有:
def changeSpecialOffer(theRequest):
myProductUuid = theRequest.POST['myProductUuid']
myNewSpecialOffer = theRequest.POST['myNewSpecialOffer']
myProduct = get_object_or_404(Product, uuid=myProductUuid)
myActiveSpecial = get_object_or_404(SpecialOffer.objects.filter(product=myProduct).filter(
active=True))
try:
myActiveSpecial.special = myNewSpecialOffer
myActiveSpecial.save()
except:
return HttpResponse(myActiveSpecial, mimetype='text/plain')
myActiveSpecial = SpecialOffer.objects.filter(product=myProduct).filter(
active=True)
return HttpResponse(myActiveSpecial, mimetype='text/plain')
Run Code Online (Sandbox Code Playgroud)
我知道更新"特殊"不起作用的原因是因为get_object_or_404正确返回404错误,因为数据库中没有预先存在的"特殊".
我已经尝试了一段时间来找出解决这个问题的最佳方法,而不会破坏数据库中存在"特殊"的情况下的功能.
到目前为止,我已经尝试更换get_object_or_404with try和except,但是我遇到了保存功能的问题,例如'unicode' has no attribute 'save()'.
尝试更换:
myActiveSpecial = get_object_or_404(SpecialOffer.objects.filter(product=myProduct).filter(
active=True))
Run Code Online (Sandbox Code Playgroud)
和:
myActiveSpecial, just_created = SpecialOffer.objects.get_or_create(product=myProduct, active=True)
Run Code Online (Sandbox Code Playgroud)
或者你可以尝试这样的事情:
try:
myActiveSpecial = SpecialOffer.objects.get(product=myProduct, active=True)
except SpecialOffer.DoesNotExist:
myActiveSpecial = SpecialOffer.objects.create(product=myProduct, active=True, ...something.more...)
Run Code Online (Sandbox Code Playgroud)
如果您需要对刚刚创建的对象执行更多操作。
编辑:
只是一个想法...将 Model 发送到 有点令人费解HttpResponse。也许您需要手动创建一个您希望在HttpResponse. 当然,当前的代码也可以工作。它隐式调用__unicode__模型的方法。
myActiveSpecial另一件事 - 重新获取之前的原因是什么return?我没有看到这可能产生任何影响。
| 归档时间: |
|
| 查看次数: |
9201 次 |
| 最近记录: |