zoukankan      html  css  js  c++  java
  • django学习之model

     定义两个样例模型:

    class Role(models.Model):
        """
        角色
        """
        name = models.CharField(verbose_name='角色名称', max_length=32, unique=True)
        permissions = models.ManyToManyField('Permission', verbose_name='权限', blank=True)
        desc = models.CharField(verbose_name='描述', max_length=50, blank=True)
    
        class Meta:
            verbose_name = '角色'
            verbose_name_plural = verbose_name
            ordering = ['id']
    
        def __str__(self):
            return self.name
    
    class Permission(models.Model):
        """
        权限
        """
        name = models.CharField(verbose_name='权限名称', max_length=32, unique=True)
        path = models.CharField(verbose_name='URL', blank=True, max_length=128)
        method = models.CharField(verbose_name='方法', max_length=16, default='GET')
        pid = models.ForeignKey('self', verbose_name='上级权限', null=True, blank=True, on_delete=models.SET_NULL)
    
        class Meta:
            verbose_name = '权限'
            verbose_name_plural = verbose_name
            ordering = ['id']
    
        def __str__(self):
            return self.name

    一旦创建 数据模型 后,Django 自动给予你一套数据库抽象 API,允许你创建,检索,更新和删除对象

    一、model模型之数据查询

    1、用 get() 检索单个对象

    若你知道只会有一个对象满足查询条件,你可以在 Manager 上使用 get() 方法,它会直接返回这个对象,可以通过object.field获取字段的值

    In [1]: from apps.rbac.models import Role,Permission
    
    In [2]: role_object = Role.objects.get(id=2)
    
    In [3]: role_object
    Out[3]: <Role: member>
    
    In [4]: role_object.id
    Out[4]: 2
    
    In [5]: role_object.name
    Out[5]: 'member'

    2、

    3、  ManyToManyField  多对多数据查询方式

    查询某个角色有哪些权限

    In [1]: from apps.rbac.models import Role,Permission
    
    In [2]: role_object = Role.objects.get(id=2)
    
    In [6]: Permission.objects.filter(role=role_object)
    Out[6]: <QuerySet [<Permission: 文件列表>, <Permission: 操作日志>]>
    
    In [7]: Permission.objects.filter(role=role_object).values()
    Out[7]: <QuerySet [{'id': 3, 'name': '文件列表', 'path': '/file/list', 'method': 'GET', 'pid_id': None}, {'id': 4, 'name': '操作日志', 'path': '/file/operatelog', 'method': 'GET', 'pid_id': None}]>
    
    In [8]: Permission.objects.filter(role=role_object).values('path')
    Out[8]: <QuerySet [{'path': '/file/list'}, {'path': '/file/operatelog'}]>
    
    In [9]: Permission.objects.filter(role=role_object).values_list('path')
    Out[9]: <QuerySet [('/file/list',), ('/file/operatelog',)]>
    
    In [10]: list(Permission.objects.filter(role=role_object).values_list('path'))
    Out[10]: [('/file/list',), ('/file/operatelog',)]
    
    In [11]: list(Permission.objects.filter(role=role_object).values_list('path',flat=True))
    Out[11]: ['/file/list', '/file/operatelog']

      In [13]: Permission.objects.filter(role__id__contains=2)
      Out[13]: <QuerySet [<Permission: 文件列表>, <Permission: 操作日志>]>

      In [14]: list(Permission.objects.filter(role__id__contains=2).values_list('path',flat=True))
      Out[14]: ['/file/list', '/file/operatelog']

    二、model模型之数据写入

    1、保存 ForeignKey 和 ManyToManyField 字段

    更新 ForeignKey 字段的方式与保存普通字段的方式相同——只需将正确类型的实例分配给相关字段。本例为 Entry 类的实例 entry 更新了 blog 属性,假设 Entry 和 Blog 的实例均已保存在数据库中(因此能在下面检索它们):

    官方文档:
    >>> from blog.models import Blog, Entry
    >>> entry = Entry.objects.get(pk=1)
    >>> cheese_blog = Blog.objects.get(name="Cheddar Talk")
    >>> entry.blog = cheese_blog
    >>> entry.save()
    
    实践:
    productline = request.POST.get('productline').strip()
    file_list = {   
      'filename': file.name,
      'productline': productline
      'describe': request.POST.get('describe', ''),
    }
    FileProperty.objects.create(**file_list)
  • 相关阅读:
    PHP 'ext/gd/gd.c' gdImageCrop整数符号错误漏洞
    Oracle Java SE远程安全漏洞(CVE-2013-5878)
    cordova for ios(android一样)添加插件
    Cordova for iOS[ PhoneGap]
    升级到win8.1右键响应慢
    不能运行,:framework not found SenTestingKit
    电驴服务器列表
    SQL常用代码收集
    Win2012 R2虚拟机自激活(AVMA)技术
    Win8系统本地连接显示为网络2
  • 原文地址:https://www.cnblogs.com/deny/p/15165479.html
Copyright © 2011-2022 走看看