1. ホーム
  2. python

[解決済み] Django が関連オブジェクトが存在するかどうかをチェックするエラー。関連オブジェクトは存在しません。

2023-01-15 14:31:42

質問

あるメソッド has_related_object があり、関連オブジェクトが存在するかどうかをチェックする必要があります。

class Business(base):
      name =  models.CharField(max_length=100, blank=True, null=True)

  def has_related_object(self):
        return (self.customers is not None) and (self.car is not None)


class Customer(base):
      name =  models.CharField(max_length=100, blank=True, null=True)
      person = models.OneToOneField('Business', related_name="customer")

でも、エラーが出ます。

ビジネス.has_related_object()

RelatedObjectDoesNotExistです。ビジネスには顧客がいません。

どのように解決するのですか?

これは、ORM がデータベースにアクセスして customer が存在するかどうかを確認するためです。存在しないので、例外を発生させます。

メソッドを以下のように変更する必要があります。

def has_related_object(self):
    has_customer = False
    try:
        has_customer = (self.customers is not None)
    except Customer.DoesNotExist:
        pass
    return has_customer and (self.car is not None)

の状況が分からないので self.car の状況を知らないので、必要であれば調整するのはお任せします。

余談ですが もしあなたがこれを Model を持つ ForeignKeyField または OneToOneField をつけると、データベースへの問い合わせを避けるためのショートカットとして、以下のようなことができるようになります。

def has_business(self):
    return self.business_id is not None