1. 程式人生 > 實用技巧 >django 正向查詢和反向查詢

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'

使用related_name 則查詢變為

主表物件.從表模型類小寫:

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'}]>

2.正向查詢由主表查詢從表(有外來鍵的)

# 這裡注意表外來鍵未使用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'}]>