django model操作

本文详细介绍了一对一、一对多及多对多关系在 Django 模型中的操作方法,包括添加、查询、更新和删除等核心功能。

model操作方法

# -*- coding: utf-8 -*-
# @Time    : 2019-06-16 20:02
# @Author  : songmz
# @email  : bettersong@canway.net
import os
import django

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
django.setup()
from django.http import JsonResponse
import sys
reload(sys)
sys.setdefaultencoding('utf-8')


# 一对一
def one_to_one_add():
    """
    添加一种颜色黑,并添加黑球
    :param request:
    :return:
    """
    color_obj = Colors.objects.create(colors=u"黑")
    print (Ball.objects.create(color=color_obj, description=u"黑球"))


def one_to_one_search():
    """
    查到黑球对应的颜色
    :param request:
    :return:
    """
    print Colors.objects.get(ball__description=u'黑球').colors


def one_to_one_update():
    """
    把黑球的颜色黑改为白
    :param request:
    :return:
    """
    print Colors.objects.filter(ball__description=u'黑球').update(colors=u"白")


def one_to_one_delete():
    """
    删除颜色为白的球
    :param request:
    :return:
    """
    print Colors.objects.filter(colors=u"白").delete()


# 一对多
def one_to_many_add():
    """
    添加颜色为黑的衣服---优衣库
    :param request:
    :return:
    """
    color_obj = Colors.objects.create(colors=u"黑")
    print (Clothes.objects.create(description=u"优衣库", color=color_obj))


def one_to_many_search():
    """
    查询所有颜色为黑的衣服
    :param request:
    :return:
    """
    print Clothes.objects.filter(color__colors=u'黑')


def one_to_many_update():
    """
    所有颜色为黑的衣服,描述都改为"森马"
    :param request:
    :return:
    """
    print Clothes.objects.filter(color__colors=u'黑').update(description=u'森马')


def one_to_many_delete():
    """
    删除颜色为黑的衣服
    :param request:
    :return:
    """
    print Clothes.objects.filter(color__colors=u'黑').delete()


# 多对多
def many_to_many_add():
    """
    添加颜色为蓝、白、红、紫
    并添加孩子"小明"喜欢所有的颜色
    :param request:
    :return:
    """
    # 添加颜色
    colors = ["蓝", "白", "红", "紫"]
    color_obj = [Colors(colors=i) for i in colors]
    Colors.objects.bulk_create(color_obj)
    # 添加孩子,并让他喜欢所有的颜色
    child_obj = Child.objects.create(name=u'小明')
    color_obj = Colors.objects.all()
    child_obj.favor.add(*color_obj)  # .add(*QuerySet对象) 如果只是一种的话 不需要用* 号


def many_to_many_search():
    """
    查找小明喜欢哪些颜色
    查找有哪些人喜欢白
    :param request:
    :return:
    """
    print Colors.objects.filter(child__name=u'小明')  # 母表对象.filter(子表表名小写__子表字段名="过滤条件")
    print Child.objects.filter(favor__colors=u'白')  # 写法:filter(子表外键字段__母表字段='过滤条件')


def many_to_many_update():
    """
    让小明只喜欢 白和红
    :param request:
    :return:
    """
    child_obj = Child.objects.get(name=u'小明')
    color_obj = Colors.objects.filter(colors__in=["白", "红"])
    child_obj.favor.clear()  # 清空小明已经喜欢的颜色
    child_obj.favor.add(*color_obj)


def many_to_many_relation():
    """ 多对多的关联关系
    让所有人不再喜欢白
    让小明不喜欢任何颜色
    :param request:
    :return:
    """
    # 让所有人不再喜欢白
    colors_obj = Colors.objects.get(colors=u'白')
    colors_obj.child_set.clear()  # 只有子表才有"子表名小写_set"的写法 后边可以接.add(),.remove(),.update(),.delete(),.clear()
    # 让小明不喜欢任何颜色
    child_obj = Child.objects.get(name=u"小明")
    child_obj.favor.clear()


def many_to_many_data():
    """
    删除数据
    喜欢蓝色的所有人都删掉
    删除所有child
    :return:
    """
    # 让小明喜欢所有的颜色,添加小李并让小李喜欢白
    child_obj = Child.objects.get(name=u'小明')
    color_obj = Colors.objects.all()
    child_obj.favor.add(*color_obj)
    child_obj = Child.objects.create(name=u'小李')
    color_obj = Colors.objects.get(colors=u'白')
    child_obj.favor.add(color_obj)
    # 喜欢蓝色的所有人都删掉
    colors_obj = Colors.objects.get(colors="蓝")
    colors_obj.child_set.all().delete()  # 注意有.all()
    # 删除所有child
    Child.objects.all().delete()


if __name__ == '__main__':
    # 一对一
    # one_to_one_add()
    # one_to_one_search()
    # one_to_one_update()
    # one_to_one_delete()
    # 一对多
    # one_to_many_add()
    # one_to_many_search()
    # one_to_many_update()
    one_to_many_delete()

    # 多对多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beter138

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值