forked from erp-dev/erp
feat: shipment change && version modelize
This commit is contained in:
@@ -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):
|
||||
"""
|
||||
通用文件上传记录
|
||||
|
||||
Reference in New Issue
Block a user