CMDB--Django模型类

表模型
manage.py@OpsManage > migrate --fake 只同步Django的migrations信息,不执行对数据库表的操作 主要是与数据库django_migrations这张表里面的数据保持同步

ListView
urls.py:

 url(r'^userinfo/',views.UserListView.as_view(),name='hello'),

views.py:

from django.views.generic import ListView
class UserListView(ListView):
    template_name = "test.html"
    model=User
    # queryset = User.objects.all()
    paginate_by = 10

test.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
         .page{list-style-type: none}
         .page li{float:left;margin-left: 10px}
    </style>
</head>
<body>
   <ul>
      {% for object in object_list %}
             <li>
                {{object.username}}
             </li>
      {% endfor %}
   </ul>
   <ul class="page">
   {% for p in paginator.page_range %}
       <a href="{% url 'hello'  %}?page={{ p}}">{{ p }}</a>
   {% endfor  %}
   </ul>
</body>
</html>

显示效果:
在这里插入图片描述
序列化模型:
urls.py:

 url(r'^userinfo/',views.UsersView.as_view(),name='hello'),

views.py:

from django.views import View
class UsersView(View):
    per_page=10

    def get_queryset(self):
        return User.objects.all().values("id","username","email","is_active")[:100]


    def get_paginate_queryset(self,queryset):
        paginator=Paginator(queryset,self.get_per_page())
        page_obj=paginator.page(self.get_current_page())  #
        print()
        return  page_obj.object_list

    def get_current_page(self):
        try:
            return int(self.request.GET.get("page",1))
        except:
            return 1

    def get_per_page(self):
       try:
           return int(self.request.GET.get("per_page",10))

       except:
           return self.per_page


    def get(self,request,*args,**kwargs):
        # print(args,kwargs)
        queryset=self.get_queryset()
        queryset=self.get_paginate_queryset(queryset) #
        return JsonResponse(list(queryset),safe=False)

一对多模型:

  • django是使用django.db.models.ForeignKey 定义多对一关系
  • ForeignKey需要一个位置参数来指定本Model关联的Model,ForeignKey关联的Model
    是"一", ForeignKey所在的Model是"多"

比如汽车和制造商的例子,一辆汽车只能属于一个制造商,但是一个制造商有多辆汽车,这个
关系,用Django的Model来表示,就是

class Manufacturer(models.Model):
name = models.CharField(max_length=30)
class Car(models.Model):
manufacturer = models.ForeignKey(Manufacturer)
name = models.CharField(max_length=30)

一对多查询:

  • 正向查询( ForeignKey 所在的模型查询关联的模型)
car = Car.objects.get(pk=2)
car.manufacturer #返回一条Manufacturer 对象
  • 反向查询( ForeignKey 指向的模型查询ForeignKey 所在的模型)
  • 如果模型有一个ForeignKey,那么该ForeignKey 所指的模型实例可以通过一个管理器返回
    前一个有ForeignKey的模型的所有实例。默认情况下,这个管理器的名字为foo_set,其中
    foo 是源模型的小写名称。该管理器返回的查询集可以用上一节提到的方式进行过滤和操
    作。
manufacturer = Manufacturer.objects.get(pk=1)
manufacturer.car_set.all() # 返回多个car对象

处理关联对象的其它方法

  • add(obj1, obj2, …) #添加一指定的模型对象到关联的对象集中。
  • create(**kwargs) #创建一个新的对象,将它保存并放在关联的对象集中。返回新创建的对
    象。
  • remove(obj1, obj2, …) #从关联的对象集中删除指定的模型对象。
  • clear() #从关联的对象集中删除所有的对象。

多对多

  • 要实现多对多,就要使用django.db.models.ManyToManyField类,和ForeignKey一样,它
    也有一个位置参数,用来指定和它关联的Model。
  • 如果不仅仅需要知道两个Model之间是多对多的关系,还需要知道这个关系的更多信息,
    比如Person和Group是多对多的关系,每个person可以在多个group里,那么group里可以
    有多个person

多对多示例

class Group(models.Model):
#...
class Person(models.Model):
     groups = models.ManyToManyField(Group)

  • 建议以被关联模型名称的复数形式做为 ManyToManyField 的名字
  • 在哪个模型中设置 ManyToManyField 并不重要,在两个模型中任选一个即可——不要在
    两个模型中都设置

一对一

  • 一对一是通过django.db.models.OneToOneField来实现的,被关联的Model会被加上
    Unique的限制, OneToOneField要一个位置参数,与模型关联的类
  • 当某个对象想扩展自另一个对象时,最常用的方式就是在这个对象的主键上添加一对一关
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值