1. ホーム
  2. django

[解決済み] Django: 整数値で外部キーを設定する?

2022-05-14 17:38:55

質問

モデルの整数idを使用して外部キー関係を設定する方法はありますか? これは、最適化のためでしょう。

例えば、Employeeモデルを持っているとします。

class Employee(models.Model):
  first_name = models.CharField(max_length=100)
  last_name = models.CharField(max_length=100)
  type = models.ForeignKey('EmployeeType')

EmployeeType(models.Model):
  type = models.CharField(max_length=100)

従業員の種類を無制限にする柔軟性が欲しいのですが、デプロイされたアプリケーションではおそらく単一の種類しかないので、この方法で id をハードコードして関係を設定する方法があるかどうか疑問に思っています。 この方法では、最初に EmployeeType オブジェクトを取得するための db 呼び出しを避けることができます。

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

はい。

employee = Employee(first_name="Name", last_name="Name")
employee.type_id = 4
employee.save()

ForeignKey フィールドは、その値を属性に _id を持つ属性に値を格納し、 データベースにアクセスしないように直接アクセスすることができます。

_id のバージョンは ForeignKey のバージョンは、Django の特に有用な側面であり、誰もが知っていて、適切なときに時々使うべきものです。

の注意点があります。 [ < Django 2.1 ]。

@RuneKaagaard は次のように指摘しています。 employee.type を呼び出した後でも、最近の Django のバージョンでは正確ではありません。 employee.save() を呼び出した後でも、正確ではありません (古い値を保持します)。これを使うと、もちろん上記の最適化の目的は達成されませんが、私は不正確であるより、偶然の余分なクエリの方がいいと思います。ですから、インスタンスでの作業が終了したときだけ、これを使うように注意してください (例えば employee ).

ノート : 以下の @humcat さんの指摘の通り、このバグは Django 2.1