zeraora.django
此模块提供了对 Django 这个框架的一些扩展和增强。
依赖性警告
使用此模块前,请务必确保您安装了 Django 这个框架!
SnakeModel
一个元类,用于为模型生成一个下划线分隔的小写的数据表名(即蛇形命名法)。
python
# ./apps/wms/models.py
from django.db import models
from zeraora.django import SnakeModel
class GoodsSKUInfo(models.Model, metaclass=SnakeModel):
name = models.CharField(max_length=64)
price = models.IntegerField()
stock = models.IntegerField()使用以上代码,Django 将生成一个名为 wms_goods_sku_info 的数据表;但若没有指定元类,那么 Django 会默认生成一个名为 wms_goodsskuinfo 的数据表。
PrefilterManager
一个管理器类,允许预设任意过滤条件。
实践指南
Django 建议使用一个管理器前先定义 objects,避免 Django 将不符合预期的管理器认作默认管理器。
python
# ./apps/oms/models.py
from django.db import models
from zeraora.django import PrefilterManager
class OrderState(models.IntegerChoices):
ORDERING = 0, '点单中'
SUBMITTED = 10, '已下单'
PAYING = 20, '支付中'
PAYED = 50, '已支付'
class Order(models.Model):
no = models.CharField(max_length=11, unique=True, db_index=True)
state = models.IntegerField()
deleted = models.BooleanField(default=False)
objects = models.Manager()
availables = PrefilterManager(
~models.Q(state=OrderState.ORDERING),
deleted=False,
)
# 下面两个查询集是等价的
Order.availables.all()
Order.objects.filter(~models.Q(state=OrderState.ORDERING), deleted=False)