Djangoモデルのカスタムマネージャーがあります。ここではDoesNotExist例外をキャッチできないようです。モデル内でそれを行う方法は知っていますが、ここでは機能しませんでした。
class TaskManager(models.Manager):
def task_depend_tree(self, *args, **kwargs):
if "id" in kwargs:
try:
task = self.get(id=kwargs["id"])
except DoesNotExist:
raise Http404
Get_object_or_404も機能しません。ここで何が間違っていますか?
ObjectDoesNotExist
の代わりにDoesNotExist
を使用するか、おそらくself.DoesNotExist
。他のすべてが失敗した場合は、Vanilla Exception
をキャッチして評価し、type()かどうかを確認してください。
from Django.core.exceptions import ObjectDoesNotExist
パンチコアが示唆したように、self.model
は進むべき道です。
class TaskManager(models.Manager):
def task_depend_tree(self, *args, **kwargs):
if "id" in kwargs:
try:
task = self.get(id=kwargs["id"])
except self.model.DoesNotExist:
raise Http404
objects = MyManager()
と言う場合、Manager.model(self.model)インスタンスからDoesNotExistを使用できます。MyManagerクラス内でself.modelを割り当てます。
try:
task = self.get(id=kwargs["id"])
return task
except self.DoesNotExist:
return None
GenericViewSetを使用してこれをリストメソッド(DRF)に実装する必要があり、空のリストを返す必要がある場合は、これを使用します。
def list(self, request, *args, **kwargs):
self.get_object() # I use this to trigger the object_permission
try:
queryset = self.queryset.filter(user=(YourModel.objects.get(user=request.user).user))
except YourModel.DoesNotExist:
return Response(YourModel.objects.none())
serializer = YSourModelSerializer(queryset, many=True)
return Response(serializer.data)