web-dev-qa-db-ja.com

Django:整数を使用して外部キーを設定しますか?

モデルの整数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)

従業員のタイプを無制限にする柔軟性が必要ですが、デプロイされたアプリケーションにはおそらく1つのタイプしかありません。このように、db呼び出しを回避して、最初にEmployeeTypeオブジェクトを取得できます。

90
User

うん:

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

ForeignKeyフィールドは、値を属性に保存し、最後に_idを付けて、データベースにアクセスしないように直接アクセスできます。

ForeignKey_idバージョンはDjangoの特に有用な側面であり、誰もが必要に応じて知って使用する必要があります。

注意:

@RuneKaagaardは、employee.typeは、最近のDjango=バージョンでは、employee.save()(古い値を保持)を呼び出した後でも正確ではないことを指摘しています。上記の最適化についてですが、誤った追加クエリが誤っていることを望んでいますので、インスタンスでの作業が終了したときにのみ使用してください(例:employee)。

187
Will Hardy

create を使用してオブジェクトを作成し、1行でデータベースに保存する代替方法:

employee = Employee.objects.create(first_name='first', last_name='last', type_id=4)
37
Jacinda