gpt4 book ai didi

python - Django Model.ObjectDoesNotExist 异常

转载 作者:行者123 更新时间:2023-11-30 23:14:53 24 4
gpt4 key购买 nike

在这里,我想获得与查询匹配的获胜者。如果我没有那个获胜者,我想创造获胜者

winner_check = Winner.objects.get(win_date__year=today.year, win_date__month=today.month, win_date__day=today.day)
if winner_check:
final_winner = winner_check
message = "Winner already generated for today."
return anything

else:
winner_index = random.randint(0, len(player_list)-1)
winner = player_list[winner_index]
return anything

这是正确的做法还是我应该生成异常

try:
winner_check = Winner.objects.get(win_date__year=today.year, win_date__month=today.month, win_date__day=today.day)
final_winner = winner_check
message = "Winner already generated for today"
return anything
except Winner.DoesNotExist:
winner_index = random.randint(0, len(player_list)-1)
final_winner = player_list[winner_index]
return anything

如果我只想得到不创建又该怎么办

try:
winner_check = Winner.objects.get(win_date__year=today.year, win_date__month=today.month, win_date__day=today.day)
except Winner.DoesNotExist:
pass

在这里,如果没有用户,我想进一步处理返回“没有赢家”之类的消息谁能指导我解决 get() 方法的异常

最佳答案

首先,我建议您将 win_date 字段定义为 models.DateField()为了使用 datetime.date 对象进行查找并避免下面的此类使用;

winner = Winner.objects.get(win_date__year=today.year, win_date__month=today.month, win_date__day=today.day)

相反,您将能够寻找这样的获胜者;

from django.utils import timezone

winner = Winner.objects.get(win_date=timezone.now().date())

对于你的问题,你可以使用get_or_create()使用给定的 win_date 搜索获胜者的方法,如果找不到,则创建一个新的获胜者。

winner, created = Winner.objects.get_or_create(win_date=timezone.now().date(), defaults={"name": "Vishnu", "surname": "Raj"})

if created:
print "New winner has been generated"
else:
print "Winner has already been generated for today"
<小时/>

对于问题的第二部分,关于检索对象和处理 DoesNotExist 异常,我建议您使用 get_object_or_404()当找不到对象时,会引发 Http404 错误。

from django.utils import get_object_or_404
from django.http import Http404

def get_winner(request, id):
try:
winner = get_object_or_404(Winner, pk=id)
except Http404:
winner = Winner(win_date=..., name=..., surname=...)

对于此类情况,发送用户 404 错误几乎总是比发送 500 更好的方法,因为 500 表示服务器错误,而 404 表示“不是”发现”。

关于python - Django Model.ObjectDoesNotExist 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28534986/

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