5

次のモデルの django アプリがあります。

class A(models.Model):
    ...

そして、次のように、A と OneToOne の関係を持つ新しいモデルを追加しました。

class B(models.Model):
    a = models.OneToOneField(A)

ご覧のとおり、A のすべてのインスタンスが B と関係を持つ必要はありません。ただし、関連する B モデルの存在について A にクエリを実行しようとすると、次のようになります。

instanceOfA.b

私は得る:

DoesNotExist: B matching query does not exist.

NoneA モデルにプロパティを追加せずに、このクエリを返す方法はありますか。私はこのほぼ同じ質問を知っていますが、悲しいことに、受け入れられた答えがなく、既存のものは A を変更することを提案しています.

私は現在使用しています:

 if hasattr(instanceOfA, b):
        ...

でもあまりすっきりしない感じ。

4

1 に答える 1

5

たとえば、Aにメソッドを設定できます

class A(object):
   # default stuff

   def get_b(self):
       return getattr(self, 'b', None)

またはより明示的

class A(object):
    def get_b(self):
        try:
            return self.b
        except Foobar.DoesNotExist:
            return None

これは Django フィーチャー チケットでカバーされています。

于 2013-05-02T08:36:39.553 に答える