模型_数据的关联查询
原创...大约 1 分钟
一对一关系
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