首页 > 编程 > Python > 正文

django rest framework 数据的查找、过滤、排序的示例

2020-02-15 22:00:38
字体:
来源:转载
供稿:网友

对于管理系统,常常需要展示列表数据,我们对于列表内的数据常常需要查找、过滤、排序等操作,其中查找等操作大部分是在后台进行的。django rest framework可以轻松的实现数据的查找、过滤等操作。接下来我们将以实际的例子进行介绍。

示例代码github地址: https://github.com/jinjidejuren/drf_learn

例如cmdb系统,作为资产管理系统常常需要对数据进行过滤或查找,获取期望的信息。

实现model

1.在这个示例项目中,需要实现对物理服务器的条件过滤,物理服务器的model列表如下(apps/assets/models.py文件):

class Server(models.Model):  """  物理服务器  """  status_choice = (    ('online', '上线'),    ('offline', '下线'),    ('normal', '正常'),    ('abnormal', '异常')  )  server_name = models.CharField(verbose_name=u'服务器名称', max_length=128, blank=False, null=False)  server_num = models.CharField(verbose_name=u'服务器编号', max_length=128, blank=True, null=True)  brand = models.CharField(verbose_name=u'品牌', max_length=64, blank=True, null=True)  model = models.CharField(verbose_name=u'型号', max_length=64, blank=True, null=True)  cpus = models.IntegerField(verbose_name=u'cpu核数', default=0)  ram = models.IntegerField(verbose_name=u'内存大小', default=0)  disk = models.IntegerField(verbose_name=u'磁盘大小', default=0)  product_date = models.DateTimeField(verbose_name=u'生产日期', auto_now_add=True)  status = models.CharField(verbose_name=u'状态', max_length=16, choices=status_choice)  created_time = models.DateTimeField(verbose_name=u'创建时间', auto_now_add=True)  modified_time = models.DateTimeField(verbose_name=u'修改时间', auto_now_add=True)  class Meta:    verbose_name = u'服务器'    verbose_name_plural = verbose_name  def __str__(self):    return self.server_name

实现serializer

接下来需要实现server这个model的序列化类,在apps/assets/serializers.py中编写:

class ServiceSerializer(serializers.ModelSerializer):  """  服务器序列化  """  class Meta:    model = Server    fields = ('id', 'server_name', 'server_num', 'brand', 'model', 'cpus',         'ram', 'disk', 'product_date', 'status', 'created_time',         'modified_time')

对于fields来说,可以使用 _ all _ 来代表所有的字段,除了model中定义的field外,序列化还可以指定其他的信息,比如嵌套信息或者自定义的信息。具体可以取决于业务逻辑。

实现modelviewset

对于modelviewset,我们可以围绕它对用户请求做相应的处理。常见的是对model进行增加、删除、查找、修改等。在这部分我们需要实现ServerViewSet:

class ServerViewSet(viewsets.ModelViewSet):  """  物理服务器视图  """  queryset = Server.objects.all().order_by('-created_time')  serializer_class = ServerSerializer  pagination_class = MyFormatResultsSetPagination            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表