class Colors(models.Model):
colors = models.CharField(max_length=10,verbose_name='颜色表')
class Meta:
vebose_name = '颜色表'
vebose_name_plural = '颜色表'
class Clothes(models.Model):
color = models.ForeignKey("Colors",verbose_name='衣服颜色')
description = models.CharField(max_length=10,verbosename='称呼')
class Meta:
verbose_name = '衣服表'
vebose_name_plural = '衣服表'
一、查
(一)查找主表数据:
1.通过主表直接查询:
color = models.Colors.objects.get(clothes__description="小虎哥").colors) #此处为双下划线
2.通过从表查询主表:
color = models.Clothes.objects.get(description="小虎哥").color.colors
(二)查找从表数据:
1.通过主表查询:
color_obj = models.Colors.objects.get(colors="红")
qs = color_obj.clothes_set.all() #通过_set方法从主表反向查询,如从表设有related_name字段,则使用改字段进行查询(替换clothes_set)
2.通过从表查询:
(1)通过对象查询:
qs = models.Clothes.objects.filter(color=models.Colors.objects.get(colors="红"))
#以下为简便写法(建议采用)
#qs = models.Clothes.objects.filter(color__colors="红")
(2)通过id查询:
color_id=models.Colors.objects.get(colors="红").id #通过母表获取到颜色为红的id
qs = models.Clothes.objects.filter(color_id=color_id)
二、增:
(一)通过对象:
models.Clothes.objects.create(color=models.Colors.objects.get(colors="绿"),description="小帅哥")
(二)通过id:
models.Clothes.objects.create(color_id=models.Colors.objects.get(colors="绿").id,description="小帅哥")
三、删
(一)
models.Clothes.objects.get(description="灰裙子").delete() #对象和QuerySet都有方法delete()
(二)
models.Colors.objects.filter(colors="灰").delete()
四、改
(一)通过对象:
models.Clothes.objects.filter(color__colors="红").update(description="大美女")
(二)通过id:
models.Clothes.objects.filter(color_id=models.Colors.objects.get(colors="红").id).update(description="大美女")
(三)通过从表的_set方法反向查询:
colors_obj=models.Colors.objects.get(colors="红")
colors_obj.clothes_set.filter(id__gte=1).update(description="大美女")
#如果从表(Clothes)中设置了related_name(设为'cls'),则使用以下方式:
#colors_obj.cls.filter(id__gte=1).update(description="大美女")