0

2 つのモデルがあり、それらに関係を設定したいと考えています。

class ModelA(models.Model):
  id   = models.IntegerField(primary_key=True) # DB => PK, AI, NN
  name = models.CharField(max_length=50)
  ...

class ModelB(models.Model):
  modelA = models.OneToOneField("ModelA", primary_key=True)
  description = models.CharField(max_length=255)
  ...

だから私は2つのモデルの間に関係があります。この関係をデータベースに保存せずに、ModelB への関係を格納するメンバーを ModelA に追加することは可能ですか?

私はそれを動的に作成されたリレーションか何かと呼びます。両方のモデルがお互いを認識できるようにするためのヒントや提案はありますか?

1 つのモデルでのリレーションを動的に行うことができればメリットがあると思います。そうしないと、モデルの 1 つを保存すると ID の 1 つが保存されないため、モデルの保存に問題が発生します。

django-admin でモデルをインラインとして簡単に使用できるように、両方のモデルに関係を持たせたいと考えています。

よろしく

4

2 に答える 2

0

Django ORMは、DB内のデータの整合性を維持するために、最初にModelAを保存し、次にModelBを保存します。

Djangoは1つのトランザクションで複数のアイテムを保存しようとすることができます。このように、キャンセルすると何も保存されませんがこれはシェルまたはPythonコードで可能です。HTTPを介して、これまでのところ、複数のクエリでトランザクションを維持することはできません。

モデルAをモデルBのインラインとして表示する必要がある場合は、新しいフィールド/モデルではなく、カスタム管理インターフェースが必要です。カスタム管理ウィジェットの書き方がわかりません。カスタムエディタビューとテンプレートとJavascriptでも同様のことをしました。保存されていないモデルをに保存しましたrequest.session

于 2012-09-17T09:42:22.860 に答える
0

Django の逆リレーションはデフォルトで作成されます。

ModelA を取得するには、次を使用します。

ModelA.objects.filter(modelb__pk = 1)

詳細については、次を参照してください。

https://docs.djangoproject.com/en/dev/topics/db/queries/

于 2012-09-17T09:14:22.637 に答える