sync from local backup
This commit is contained in:
+220
@@ -0,0 +1,220 @@
|
||||
from django.db import models
|
||||
from django.conf import settings
|
||||
|
||||
|
||||
class ToolCategory(models.Model):
|
||||
name = models.CharField(
|
||||
max_length=50,
|
||||
unique=True,
|
||||
verbose_name='分类名称'
|
||||
)
|
||||
icon = models.CharField(
|
||||
max_length=100,
|
||||
default='AppstoreOutlined',
|
||||
verbose_name='图标名称'
|
||||
)
|
||||
sort_order = models.IntegerField(
|
||||
default=0,
|
||||
verbose_name='排序'
|
||||
)
|
||||
created_at = models.DateTimeField(
|
||||
auto_now_add=True,
|
||||
verbose_name='创建时间'
|
||||
)
|
||||
|
||||
class Meta:
|
||||
ordering = ['sort_order', '-created_at']
|
||||
verbose_name = '工具分类'
|
||||
verbose_name_plural = '工具分类'
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class Tool(models.Model):
|
||||
name = models.CharField(
|
||||
max_length=100,
|
||||
verbose_name='工具名称'
|
||||
)
|
||||
description = models.TextField(
|
||||
default='',
|
||||
blank=True,
|
||||
verbose_name='工具描述'
|
||||
)
|
||||
icon = models.CharField(
|
||||
max_length=100,
|
||||
default='ToolOutlined',
|
||||
verbose_name='图标名称'
|
||||
)
|
||||
url_path = models.CharField(
|
||||
max_length=200,
|
||||
unique=True,
|
||||
verbose_name='路由路径'
|
||||
)
|
||||
category = models.ForeignKey(
|
||||
ToolCategory,
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
related_name='tools',
|
||||
verbose_name='所属分类'
|
||||
)
|
||||
is_enabled = models.BooleanField(
|
||||
default=True,
|
||||
verbose_name='是否启用'
|
||||
)
|
||||
is_new = models.BooleanField(
|
||||
default=False,
|
||||
verbose_name='是否为新工具'
|
||||
)
|
||||
color = models.CharField(
|
||||
max_length=20,
|
||||
default='#667eea',
|
||||
blank=True,
|
||||
verbose_name='主题颜色'
|
||||
)
|
||||
usage_count = models.IntegerField(
|
||||
default=0,
|
||||
verbose_name='使用次数'
|
||||
)
|
||||
sort_order = models.IntegerField(
|
||||
default=0,
|
||||
verbose_name='排序'
|
||||
)
|
||||
created_at = models.DateTimeField(
|
||||
auto_now_add=True,
|
||||
verbose_name='创建时间'
|
||||
)
|
||||
updated_at = models.DateTimeField(
|
||||
auto_now=True,
|
||||
verbose_name='更新时间'
|
||||
)
|
||||
|
||||
class Meta:
|
||||
ordering = ['sort_order', '-created_at']
|
||||
verbose_name = '工具'
|
||||
verbose_name_plural = '工具'
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class ToolFavorite(models.Model):
|
||||
user = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
related_name='tool_favorites',
|
||||
verbose_name='用户'
|
||||
)
|
||||
tool = models.ForeignKey(
|
||||
Tool,
|
||||
on_delete=models.CASCADE,
|
||||
related_name='tool_favorites',
|
||||
verbose_name='工具'
|
||||
)
|
||||
created_at = models.DateTimeField(
|
||||
auto_now_add=True,
|
||||
verbose_name='创建时间'
|
||||
)
|
||||
|
||||
class Meta:
|
||||
verbose_name = '工具收藏'
|
||||
verbose_name_plural = '工具收藏'
|
||||
unique_together = ['user', 'tool']
|
||||
ordering = ['-created_at']
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.user} favorites {self.tool}'
|
||||
|
||||
|
||||
class CompressionHistory(models.Model):
|
||||
COMPRESSION_MODE_CHOICES = [
|
||||
('lossy', '有损压缩'),
|
||||
('lossless', '无损优化'),
|
||||
]
|
||||
|
||||
user = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
null=True,
|
||||
blank=True,
|
||||
verbose_name='用户'
|
||||
)
|
||||
session_id = models.CharField(
|
||||
max_length=64,
|
||||
null=True,
|
||||
blank=True,
|
||||
verbose_name='会话ID'
|
||||
)
|
||||
original_filename = models.CharField(
|
||||
max_length=255,
|
||||
verbose_name='原始文件名'
|
||||
)
|
||||
original_size = models.BigIntegerField(
|
||||
verbose_name='原始大小(字节)'
|
||||
)
|
||||
compressed_size = models.BigIntegerField(
|
||||
verbose_name='压缩后大小(字节)'
|
||||
)
|
||||
compression_ratio = models.FloatField(
|
||||
verbose_name='压缩率'
|
||||
)
|
||||
original_format = models.CharField(
|
||||
max_length=10,
|
||||
verbose_name='原始格式'
|
||||
)
|
||||
output_format = models.CharField(
|
||||
max_length=10,
|
||||
verbose_name='输出格式'
|
||||
)
|
||||
compression_mode = models.CharField(
|
||||
max_length=10,
|
||||
choices=COMPRESSION_MODE_CHOICES,
|
||||
verbose_name='压缩模式'
|
||||
)
|
||||
quality = models.IntegerField(
|
||||
null=True,
|
||||
blank=True,
|
||||
verbose_name='压缩质量'
|
||||
)
|
||||
created_at = models.DateTimeField(
|
||||
auto_now_add=True,
|
||||
verbose_name='创建时间'
|
||||
)
|
||||
file_path = models.CharField(
|
||||
max_length=500,
|
||||
verbose_name='文件路径'
|
||||
)
|
||||
|
||||
class Meta:
|
||||
ordering = ['-created_at']
|
||||
verbose_name = '压缩历史'
|
||||
verbose_name_plural = '压缩历史'
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.original_filename} - {self.compression_ratio:.1f}%"
|
||||
|
||||
|
||||
class ColorHistory(models.Model):
|
||||
user = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
related_name='color_histories',
|
||||
verbose_name='用户'
|
||||
)
|
||||
color = models.CharField(
|
||||
max_length=7,
|
||||
verbose_name='颜色值(HEX)'
|
||||
)
|
||||
created_at = models.DateTimeField(
|
||||
auto_now_add=True,
|
||||
verbose_name='创建时间'
|
||||
)
|
||||
|
||||
class Meta:
|
||||
ordering = ['-created_at']
|
||||
verbose_name = '颜色历史'
|
||||
verbose_name_plural = '颜色历史'
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.user} - {self.color}'
|
||||
Reference in New Issue
Block a user