Django中ORM一对多模型的增、删、改、查笔记

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="大美女")
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值