gpt4 book ai didi

Django:get_object_or_404不是正确的解决方案,但什么是?

转载 作者:行者123 更新时间:2023-12-03 01:09:43 24 4
gpt4 key购买 nike

我正在努力为我在这里尝试做的事情找到正确的解决方案,并且非常感谢一些帮助。

目前,我有一个工作系统,它从数据库中获取“Special”并将其显示在浏览器中。用户可以在浏览器中编辑该“Special”并将其提交到数据库。然后,该更改会显示给用户。

问题是,如果数据库中没有预先存在的“Special”,“Special”将不会更新。在我的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')

我知道“Special”更新不起作用的原因是 get_object_or_404 正确返回 404 错误,因为数据库中没有预先存在的“Special”。

我已经尝试了一段时间来找出解决此问题的最佳方法,而不会在数据库中存在现有“特殊”的情况下破坏功能。

到目前为止,我已经尝试将 get_object_or_404 替换为 try except,但随后我遇到了保存功能的问题,例如'unicode'没有属性'save()'

最佳答案

尝试替换:

myActiveSpecial = get_object_or_404(SpecialOffer.objects.filter(product=myProduct).filter(
active=True))

与:

myActiveSpecial, just_created = SpecialOffer.objects.get_or_create(product=myProduct, active=True)

或者你可以尝试这样的事情:

try:
myActiveSpecial = SpecialOffer.objects.get(product=myProduct, active=True)
except SpecialOffer.DoesNotExist:
myActiveSpecial = SpecialOffer.objects.create(product=myProduct, active=True, ...something.more...)

如果您需要对刚刚创建的对象执行更多操作。

编辑:

只是一个想法...将模型发送到 HttpResponse 有点令人费解。也许您需要手动创建一个希望在 HttpResponse 中返回的字符串。当然,当前的代码也可以工作。它隐式调用模型的 __unicode__ 方法。

另一件事 - 在 return 之前重新获取 myActiveSpecial 的原因是什么?我没有看到这可能产生任何影响。

关于Django:get_object_or_404不是正确的解决方案,但什么是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11922433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com