跳至主要內容

模型_数据的关联查询

刘春龙原创...大约 1 分钟PythonDjango教程文档

一对一关系

class Place(models.Model):
    name = models.CharField(max_length=50)
    address = models.CharField(max_length=80)


class Restaurant(models.Model):
    """
    餐厅
    """
    name = models.CharField(max_length=32,verbose_name='餐厅名')
    place = models.OneToOneField(Place,on_delete=models.CASCADE,verbose_name='所在位置',null=True)

    class Meta:
        db_table='t_restaurant'

通过 Place 查找 Restaurant

place = Place.objects.first()
restaurant = place.restaurant

通过 定义了 OneToOneField 的模型 Restaurant 查找 Place

restaurant = Restaurant.objects.first()
place = restaurant.place

一对多关系

from django.db import models

class Restaurant(models.Model):
    name = models.CharField(max_length=32,verbose_name='餐厅名')
    class Meta:
        db_table='t_restaurant'

class Waiter(models.Model):
    name = models.CharField(max_length=32,verbose_name='人名')
    induction = models.DateTimeField(verbose_name='入职时间',null=True)
    restaurant = models.ForeignKey(Restaurant,on_delete=models.CASCADE,verbose_name='所在餐厅',null=True)
    def __str__(self):
        return f'{self.name} == {self.induction}'
    class Meta:
        db_table='t_waiter'

从 一的模型 查找 多的模型

通过 '多的模型小写名_set' 查找

restaurant = Restaurant.objects.first()
waiters = restaurant.waiter_set.all()

从 多的模型 查找 一的模型

w1 = Waiter.objects.first()
r1 = w1.restaurant

多对多关系

from django.db import models

class Restaurant(models.Model):
    name = models.CharField(max_length=32,verbose_name='餐厅名')
    class Meta:
        db_table='t_restaurant'

class Food(models.Model):
    name = models.CharField(max_length=32,verbose_name='菜名')
    is_main = models.BooleanField(default=True,verbose_name='是否是主食',null=True)
    restaurant = models.ManyToManyField(Restaurant,verbose_name='哪个餐厅有',null=True)
    class Meta:
        db_table='t_food'

从 没有写 ManyToManyField 的模型查找另一 写了 ManyToManyField 的模型

需要在 查询的模型名的小写后 加 _set

restaurant = Restaurant.objects.first()
foods = Restaurant.food_set.all()

从 写了 ManyToManyField 的模型查找另一个模型

food = Food.objects.first()
schoolClasses = food.restaurant.all()

上次编辑于:
贡献者: 刘春龙
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.7