1
0
forked from erp-dev/erp

feat: shipment change && version modelize

This commit is contained in:
2026-07-09 23:03:22 +08:00
parent 36e4bb6de6
commit 48e4782e1e
23 changed files with 947 additions and 36 deletions

View File

@@ -4,8 +4,10 @@ API v1 通用模型
import os
import uuid
from django.db import models
from django.db.models import Q
from django.contrib.auth import get_user_model
from django.db.models.fields.json import KeyTextTransform
from django.utils import timezone
from flower.common import ModelBase
from basic_info import models as basic_info_models
@@ -28,6 +30,53 @@ def upload_file_path(instance, filename):
return f"uploads/{now.year}/{now.month:02d}/{now.day:02d}/{random_filename}"
def app_version_file_path(instance, filename):
ext = os.path.splitext(filename)[1].lower()
random_filename = f"{uuid.uuid4().hex}{ext}"
return f"app_versions/{random_filename}"
class AppVersion(ModelBase):
major = models.PositiveIntegerField(default=0, verbose_name='主版本号')
minor = models.PositiveIntegerField(default=0, verbose_name='次版本号')
build = models.PositiveIntegerField(default=0, verbose_name='构建号')
package_file = models.FileField(
upload_to=app_version_file_path,
max_length=500,
blank=True,
null=True,
verbose_name='安装包文件',
help_text='可通过 Admin 上传,保存后会自动写入下载地址',
)
download_url = models.URLField(max_length=2048, blank=True, verbose_name='下载地址')
force = models.BooleanField(default=False, verbose_name='是否强制更新')
publish_date = models.DateField(default=timezone.localdate, verbose_name='发布日期')
message = models.TextField(blank=True, verbose_name='更新说明')
is_current = models.BooleanField(default=False, db_index=True, verbose_name='当前版本')
class Meta:
verbose_name = 'App版本'
verbose_name_plural = 'App版本'
ordering = ['-is_current', '-created_at']
constraints = [
models.UniqueConstraint(
fields=['is_current'],
condition=Q(is_current=True),
name='uniq_current_app_version',
),
]
def __str__(self):
return f'{self.major}.{self.minor}.{self.build}'
def save(self, *args, **kwargs):
if self.package_file:
self.download_url = self.package_file.url
if self.is_current:
AppVersion.objects.exclude(pk=self.pk).filter(is_current=True).update(is_current=False)
super().save(*args, **kwargs)
class UploadedFile(ModelBase):
"""
通用文件上传记录