Fieldオブジェクトのrelated_name
属性とrelated_query_name
属性の違いについて、Django?を使用する場合の使用方法、ありがとうございます!
related_name
は、関連オブジェクトの属性であり、外部キーを含むモデルに「後方」に移動できます。たとえば、ModelA
にmodel_b = ForeignKeyField(ModelB, related_name='model_as')
のようなフィールドがある場合、これにより、ModelA
インスタンスに関連するModelB
インスタンスにアクセスできます。 model_b_instance.model_as.all()
になります。外部キーは1対多の関係であり、その方程式の多くの側面は外部キーフィールドが宣言されているモデルであるため、これは一般に外部キーに対して複数で記述されることに注意してください。
ドキュメントにリンクされている詳細な説明が役立ちます。 https://docs.djangoproject.com/en/1.10/topics/db/queries/#backwards-related-objects
related_query_name
は、Django querysetsで使用します。外部キー関連フィールドの逆リレーションシップでフィルタリングできます。例を続けるために、Model A
のようなフィールドを持つ:model_b = ForeignKeyField(ModelB, related_query_name='model_a')
を使用すると、model_a
をクエリセットのルックアップパラメーターとして使用できます。例:ModelB.objects.filter(model_a=whatever)
。related_query_name
に単数形を使用するのがより一般的です。 related_name
とrelated_query_name
の両方(またはいずれか)を指定しますDjangoには適切なデフォルトがあります。
_class Musician(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
class Album(models.Model):
artist = models.ForeignKey(Musician, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
_
ここで、外部キーの前方関係はアルバムからミュージシャンへ、後方関係はミュージシャンからアルバムへです。つまり、1つのアルバムインスタンスは1つのミュージシャンインスタンスのみと関係を持つことができ(前方関係)、1つのミュージシャンインスタンスは複数のアルバムインスタンスと関係することができます(後方)。 forwardクエリはこのAlbum_instance.artistのようになります。ここでは、album_instancに続けてartist(フィールド名)によって実行されるforwardクエリに注意してください。そして後方になります
_Musician_instance.album_set.all()
_
ここでは、逆方向クエリの場合、modelname_setが使用されます。
artist = models.ForeignKey(Musician, on_delete=models.CASCADE, related_name='back')
のようなrelated_nameを指定した場合
逆方向のクエリ構文は変更され、modelname_set(artist.set)はbackに置き換えられます。今後方クエリ
_Musician_instance.back.all()
_
Django後方関係を作成しない場合は、related_nameを「+」に設定するか、「+」で終了します。
およびrelated_query_nameは、ターゲットモデルからの逆フィルター名に使用します