Skip to content

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)