django 正向查詢和反向查詢


class AppleModel(models.Model):
    id=models.AutoField(primary_key=True)
    app_name=models.CharField(max_length=50)
    class Meta:
        db_table='tbl_apple'


class PickleModel(models.Model):
    pid=models.AutoField(primary_key=True)
    app=models.ForeignKey(to="AppleModel",on_delete=models.CASCADE,related_name="pickle")
    color=models.CharField(max_length=20)
    class Meta:
        db_table='tbl_pickle'

 

什么叫正向:由外鍵所在表(從表) 查詢主表對象或者主表字段就叫正向查詢

示例:

filter格式外鍵所在模型類(從表)的外鍵字段名__主表字段名

# 查到的是蘋果對象,從表查主表對象

PickModel.objects.filter(app__app_name="red").values()

反向查詢:由主表對象查詢從表對應的關聯主表對象的從表對象或者字段  即為反向查詢,如根據班級對象找到一班對應的名字為張三的學生對象信息

# 查到的是Pickle對象

filter格式:主表類的relaetd_name__從表字段名
Apple.objects.filter("pickle__color="red").values()

 

下面演示反向查詢的兩種方式使用related_name 和不使用related_name

使用related_name 則查詢變為

主表對象.related_name的值.all() # 如果一對一直接不使用all:

from platformapp.models import *
app=AppleModel.objects.first()
app.pickle
<django.db.models.fields.related_descriptors.create_reverse_many_to_one_manager.<locals>.RelatedManager object at 0x000001C5E0494048>
app.pickle.all()
<QuerySet [<PickleModel: PickleModel object (1)>, <PickleModel: PickleModel object (2)>]>
app.pickle.all().values()
<QuerySet [{'pid': 1, 'app_id': 7, 'color': 'red'}, {'pid': 2, 'app_id': 7, 'color': 'black'}]>

 

反向查不使用related_name

# 這里注意表外鍵未使用related_name參數

app=models.ForeignKey(to="AppleModel",on_delete=models.CASCADE)
查詢格式:

主表對象.從表模型類小寫_set:

class AppleModel(models.Model):
    id=models.AutoField(primary_key=True)
    app_name=models.CharField(max_length=50)
    class Meta:
        db_table='tbl_apple'


class PickleModel(models.Model):
    pid=models.AutoField(primary_key=True)
    app=models.ForeignKey(to="AppleModel",on_delete=models.CASCADE)
    color=models.CharField(max_length=20)
    class Meta:
        db_table='tbl_pickle'

  

from platformapp.models import *
app=AppleModel.objects.first()
app.picklemodel_set.all()
<QuerySet [<PickleModel: PickleModel object (1)>, <PickleModel: PickleModel object (2)>]>
app.picklemodel_set.all().values()
<QuerySet [{'pid': 1, 'app_id': 7, 'color': 'red'}, {'pid': 2, 'app_id': 7, 'color': 'black'}]>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM