80

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 も機能しません。ここで何が問題なのですか?

4

6 に答える 6

142

ObjectDoesNotExistの代わりに、DoesNotExistまたは場合によってはを使用してみてくださいself.DoesNotExist。他のすべてが失敗した場合は、バニラをキャッチしExceptionて評価し、それが type() であることを確認してください。

from django.core.exceptions import ObjectDoesNotExist

于 2013-01-10T15:18:48.163 に答える
16

パンチコ​​アが示唆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
于 2014-05-04T19:46:48.893 に答える
2

objects = MyManager()MyManager クラス内で self.model を割り当てていると言うときは、Manager.model (self.model) インスタンスから DoesNotExist を使用できます。

        try:
            task = self.get(id=kwargs["id"])
            return task
        except self.DoesNotExist:
            return None
于 2013-09-07T14:16:19.203 に答える
1

Django では、モデルのすべてのオブジェクトに例外プロパティがありますDoesNotExists。したがって、オブジェクト自体または例外モジュールから呼び出すことができます。

オブジェクト ( self) から:

from django.db import models

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

例外モジュールから:

from django.core.exceptions import ObjectDoesNotExist

try:
    return "Calling object"
except ObjectDoesNotExist:
    raise Http404
于 2021-05-27T03:13:23.417 に答える
0

私はこの方法で例外を処理し、うまくいきました。

from django.core.exceptions import ObjectDoesNotExist

try:
    task = self.get(id=kwargs["id"])
except ObjectDoesNotExist as DoesNotExist:
    raise Http404

于 2020-05-30T23:22:28.517 に答える