zoukankan      html  css  js  c++  java
  • Django 之 分表

    app名称为‘core’,基本的models.py文件内容如下:

     1 class Province(models.Model):
     2     name = models.CharField(u'省份名称',max_length=32)
     3     code = models.IntegerField(verbose_name=u'区号', unique=True)
     4     
     5     def __unicode__(self):
     6         return self.name
     7     
     8     class Meta:
     9         verbose_name = u'省份列表'
    10         verbose_name_plural = u'省份列表'

    法I:

    重构 manager 中的 get_query_set() 方法。

    需要说明的是:在 django 默认情况下,会为每一个models 类添加一个名为 objects 的 Manager,这个就是 Province.objects.all() 中 objects 的由来。

    修改后的 models.py 代码如下,表结构必须一致:

     1 # coding:utf-8
     2 from django.db import models
     3 
     4 # Create your models here.
     5 class ProvinceManager(models.Manager):
     6     def get_queryset(self):
     7 #         return super(ProvinceManager, self).get_queryset().filter(id=1)
     8         self.model._meta.db_table = 'core_province_1' # 我的app名为core
     9         return super(ProvinceManager, self).get_queryset()10         11     
    12 class Province(models.Model):
    13     name = models.CharField(u'省份名称',max_length=32)
    14     code = models.IntegerField(verbose_name=u'区号', unique=True)
    15     
    16     objects = ProvinceManager()
    17     
    18     def __unicode__(self):
    19         return self.name
    20     
    21     class Meta:
    22         verbose_name = u'省份列表'
    23         verbose_name_plural = u'省份列表'

    可以多写几个 Manager 来对应不同的表,同时对应多写几个不同的 objects(可以随意起名),在调用时调用相应的 Manager。

    法II:

    在哪里调用就在哪里更改。更改处添加代码如下:

    1 from core.models import Province
    2 
    3 Province._meta.db_table = 'core_prvoince_2'
    4 rows = Province.objects.all() 

    总结:

    不论哪种方法,其主要还是要更改 models 的 _meta.db_table 的值

  • 相关阅读:
    jQuery 基本选择器
    JavaScriptif while for switch流程控制 JS函数 内置对象
    JavaScrip基本语法
    数据库 存储引擎 表的操作 数值类型 时间类型 字符串类型 枚举集合 约束
    数据库基础知识 管理员 用户登录授权的操作
    粘包的产生原理 以及如何解决粘包问题
    socket TCP DPT 网络编程
    2018年年终总结
    Android技术分享
    No accelerator found
  • 原文地址:https://www.cnblogs.com/liuq/p/5946087.html
Copyright © 2011-2022 走看看