関係ジャンゴで複数のテーブルを照会

一つは、多くの、多区別:1:サブテーブルは、データのテーブルから選択され、親、1以下のうち選択した親テーブル、子テーブルが親テーブルを選択しなくてもよい対応します多くのデータの一部を選択されている:母からのデータテーブルを選択するための1子テーブルを、このデータテーブルの母親は、他のサブ多くのテーブルで選択することができたデータをまとめたものです。例えば、より多くの子どもたちがあります、およびさまざまな色が、それぞれの子は、さまざまな色を楽しむことができ、一つの色はもっと子供のようにすることができ、より多くの選択肢を持つことができる双方向のためのものです。サブテーブルを含むテーブルのリレーションシップフィールドは、関連するテーブルは、親テーブルと呼ばれる呼ばれます。OneToOneField:1人の関係、関係フィールドには、いずれかに定義することができます。フォワード・クエリは、次の2つの形式で単語​​テーブルの女性のテーブルからクエリされています。


クラスの人(models.Model):
    isMarryed = models.BooleanField(デフォルト=真、verbose_name = '婚否')
    教育= models.CharField(max_lengthを= 10、verbose_name = '学历')
 
クラスidCard(models.Model):
    countNum = models.IntegerField(デフォルト= '000000'、verbose_name = '编号')
    名前= models.CharField(max_lengthを= 20、verbose_name = '姓名')
    性別= models.BooleanField(デフォルト=真、verbose_name = '性别')
    真のヌル=が設定されている場合にのみ#、on_delete = models.SET_NULLが成功するために設定されています
    人= models.OneToOneField(人、on_delete = models.SET_NULL、ヌル=真)
 
親、子テーブルのオブジェクト名小文字アルファベットテーブルエントリフィールド名、idCard.objects.get(ID = 1).person.education、マスターからテーブルクエリ@:@サブテーブルのクエリから親テーブルクエリサブテーブルによって、しかし、フォーム自体が直接親表オブジェクトフィールドから取得され、書き込まれるアルファベット.objects.get(サブサブテーブル小文字フィールド__ =「XXX」)。アルファベットフィールド名、person.objects.get(idCard__id = 1).education;すなわち、親テーブルクエリサブテーブルからクエリを逆二つの形式がある:マスターテーブルからクエリ@:小文字のサブテーブル、person.objects.get(IDでターゲットサブテーブルの親テーブル名フィールド名= ..サブテーブルのクエリから@、照会表、親、子テーブルによるが、フォーム自体は、子テーブルからオブジェクトフィールドに直接アクセスされ、子テーブルの.objects.get(1-親、子テーブルのフィールド__; 1).idcard.nameテーブルのフィールド= 'XXX')のサブテーブルのフィールド、idCard.objects.get(person__education = 'ジュニア').nameの。
女性の小文字の名前の子テーブルオブジェクト。模範。アルファベットのフィールド名
 

クラスの人(models.Model):
    isMarryed = models.BooleanField(デフォルト=真、verbose_name = '婚否')
    教育= models.CharField(max_lengthを= 10、verbose_name = '学历')
 
クラスidCard(models.Model):
    countNum = models.IntegerField(デフォルト= '000000'、verbose_name = '编号')
    名前= models.CharField(max_lengthを= 20、verbose_name = '姓名')
    性別= models.BooleanField(デフォルト=真、verbose_name = '性别')
    真のヌル=が設定されている場合にのみ#、on_delete = models.SET_NULLが成功するために設定されています
    人= models.OneToOneField(人、on_delete = models.SET_NULL、ヌル=真)
 

#フォワード問い合わせ
デフ問い合わせ(リクエスト):
    IDS = idCard.objects.filter(ID = 1)1次回()
    情報= ids.person.education
    ids.person.education = '保育園'
    ids.person.save()
    HttpResponseを返す(詳細)
 
#逆引き参照
デフQuery1を(要求):
    人= person.objects.get(ID = 1)
    ファック= persons.idcard.name
    (性交)はHttpResponseを返します
 
@。子テーブル)のアルファベットが多いので、同じことが.gerずつ(ようにすることはできません、別のクエリとの1対1の関係、外部キーテーブルのクエリの親、子テーブルで3つの方法の検索を逆にします。サブテーブルフィールド取得し、親表オブジェクト。サブテーブル名小文字.ALL()FCLASS = className.objects.filter(ID = 1)1次回()。student_set.all()が得られる[A] @fclass =学生クエリセット.objects.filter(inClass = className.objects.get(ID = 1))--->シンプルな言葉遣い:FCLASS = student.objects.filter(inClass__teacher = 'あおい')[フィルタ(子テーブルの親の外部キーフィールド__フィールド=「フィルタ条件」)] @サブテーブルによって、サブテーブル名.objects.filter(子テーブルの外部キーフィールド= _親テーブルの主キーマスターテーブルの主キーオブジェクト)で始まり、FCLASS = student.objects.filter(inClass__id = 1)

#多くの正のお問い合わせ
デフQUERY2(リクエスト):
    「「」
    teacherName = student.objects.get(stuName = '罗程')
    teacherName = teacherName.inClass.teacher
    「「」
    teacherName = className.objects.get(student__stuName = '锤子').teacher
    HttpResponseを返す(teacherName)
 
#逆引き参照
デフquery3(リクエスト):
    「「」
    一般的な言葉遣い
    FCLASS = className.objects.filter(ID = 1))(1次回
    FCLASS = fclass.student_set.all()
    私FCLASS中のため:
        印刷(i.stuName)
    HttpResponseを返す(FCLASS)
    「「」
 
    #fclass = student.objects.filter(inClass = 1)
    #fclass = student.objects.filter(inClass = className.objects.get(ID = 1))
    #fclass = student.objects.filter(inClass__teacher = '苍井空')
    FCLASS = student.objects.filter(inClass__id = 1)
    私FCLASS中のため:
        印刷(i.stuName)
    ( '1111')はHttpResponseを返します
 

クラスの色(models.Model):
    色= models.CharField(MAX_LENGTH = 10)#蓝色
    デフ__str __(自己):
        リターンself.colors
クラスの子供(models.Model):
    名前= models.CharField(max_lengthを= 10)#姓名 
    賛成= models.ManyToManyField(「色」)#多くの色のテーブル
 

[<色:赤>、<色:イエロー>、<色:ブルー>]リターン - 親テーブルが小さいような色を見つけるために#-manyサブテーブルのクエリ
問い合わせ、親テーブルの多くの異なる形態を持つ#子テーブル、多くは、クエリテーブル「A」の母であるため、多くの多くは、「多くの」女性のテーブルのクエリです
#1書かれました:
書かれたchild_obj = models.Child.objects.get(名前= "ボブ")#:サブテーブルターゲットサブ多くのフィールドのフィルタ条件テーブル(すべての()/フィルタ())..
印刷(child_obj.favor.all())
#2は、親テーブルの逆から始めて、書かれました:
プリント(models.Colors.objects.filter(child__name =「ボブ」))#1 .filter親表オブジェクト(サブサブテーブル名小文字__表フィールド名=「フィルタ」)
 
 
#-many親テーブル、クエリ、子テーブルには、見つける何黄色のような人 - リターン:[<子供:暁明>、<子ども:Yadar>]
#女性のサブテーブル、クエリテーブルの多くの形態と完全に一致し、クエリセットので発見され、および多対多では、「多くの」サブテーブルのクエリです
#1書かれました:
color_obj = models.Colors.objects.get(色= "黄")
印刷(color_obj.child_set.all())
#2書かれました:
印刷(models.Child.objects.filter(賛成= models.Colors.objects.get(色= "黄")))
#2書かれたシンプルな書き込み(推奨):
印刷(models.Child.objects.filter(favor__colors =「黄色」))書かれた#:フィルタ(子テーブルの外部キーフィールドのマスターテーブルのフィールド= __「フィルタ条件」)
#3書かれました:
COLOR_ID = models.Colors.objects.get(色=「黄色」)親テーブルID赤色により取得位.ID
印刷というクエリセットを得#filter(models.Child.objects.filter(賛成= COLOR_ID))、書き込み:フィルタ(子テーブルの外部キーフィールドマスタテーブルの主キー=オブジェクト)、ここでは、多くのわずかに異なるで、サブシート代わりに、外部キーフィールドマスタテーブルの主キーのキーフィールド_
 
 
 

おすすめ

転載: www.cnblogs.com/fan-1994716/p/11209635.html