codepedia2/apps/projects/models.py

168 lines
7.0 KiB
Python

from django.db import models
from users.models import User
# Create your models here.
class Language(models.Model):
name = models.CharField(max_length=50, verbose_name='编程语言')
create_time = models.DateTimeField(auto_now_add=True)
update_time = models.DateTimeField(auto_now=True)
src = models.CharField(max_length=50,verbose_name="编程语言源代码",null=True)
class Meta:
db_table = 'Source_Language'
verbose_name = "编程语言"
verbose_name_plural = verbose_name
def __str__(self):
return self.name
class Project(models.Model):
STATE_CHOICE = [
('1', '正常'),
('2', '删除'),
('3', '即将上线'),
]
name = models.CharField(max_length=255, verbose_name='工程名称')
desc = models.TextField(verbose_name='描述')
path = models.CharField(max_length=200, verbose_name='工程路径')
language = models.ForeignKey(Language, null=True, verbose_name='编程语言', on_delete=models.SET_NULL)
github = models.URLField(max_length=100, verbose_name='Github网址')
ossean = models.URLField(max_length=100, verbose_name='Ossean网址')
files = models.IntegerField(default=0, verbose_name='文件数量')
views = models.IntegerField(default=0, verbose_name='点击数量')
uploader = models.ForeignKey(User, verbose_name="上传者", default="1", null=True, on_delete=models.SET_NULL)
state = models.CharField(max_length=3, choices=STATE_CHOICE, default='1')
create_time = models.DateTimeField(auto_now_add=True)
update_time = models.DateTimeField(auto_now=True)
is_competition_project = models.BooleanField(default=False, verbose_name='是否是竞赛项目')
is_open = models.BooleanField(default=False, verbose_name='是否是竞赛项目')
class Meta:
db_table = 'Source_Project'
verbose_name = "工程"
verbose_name_plural = verbose_name
indexes = [
models.Index(fields=['views', ]),
models.Index(fields=['create_time', ]),
models.Index(fields=['uploader', ]),
]
def __str__(self):
return self.name
class File(models.Model):
TYPE_CHOICE = [
('0', '目录'),
('1', '文件'),
]
STATE_CHOICE = [
('1', '正常'),
('2', '删除'),
('3', '即将上线'),
]
name = models.CharField(max_length=255, verbose_name='文件名称')
path = models.CharField(max_length=512, verbose_name='文件路径')
super_path = models.ForeignKey("self", null=True, blank=True, verbose_name='上级目录', on_delete=models.CASCADE)
project = models.ForeignKey(Project, verbose_name='工程名称', on_delete=models.CASCADE)
type = models.CharField(max_length=3, choices=TYPE_CHOICE, default='0')
state = models.CharField(max_length=3, choices=STATE_CHOICE, default='1')
views = models.IntegerField(default=0, verbose_name='点击数量')
vote = models.IntegerField(default=0, verbose_name='点赞数量')
has_summary = models.BooleanField(default=False, verbose_name='是否有有摘要')
has_note = models.BooleanField(default=False, verbose_name='是否有首行注释')
has_question = models.BooleanField(default=False, verbose_name='是否添加0行问题')
has_sonar = models.BooleanField(default=False, verbose_name='是否通过sonar获取问题')
create_time = models.DateTimeField(auto_now_add=True)
update_time = models.DateTimeField(auto_now=True)
anno_num = models.IntegerField(default=0, verbose_name='注释数量')
issue_num = models.IntegerField(default=0, verbose_name='问题数量')
has_annotation = models.BooleanField(default=False, verbose_name='是否有标注')
is_competition_file = models.BooleanField(default=False, verbose_name='是否是竞赛文件')
class Meta:
db_table = 'Source_File'
verbose_name = "文件"
verbose_name_plural = verbose_name
indexes = [
models.Index(fields=['views', ]),
models.Index(fields=['create_time', ]),
]
def __str__(self):
return '文件{0}_{1}'.format(self.id, self.name)
class FileInfo(models.Model):
file = models.ForeignKey(File, verbose_name='文件', on_delete=models.CASCADE)
summary = models.CharField(max_length=300, default='', verbose_name='摘要')
note = models.TextField(default='', verbose_name='首行注释')
class Meta:
db_table = 'Source_FileInfo'
verbose_name = "文件信息"
verbose_name_plural = verbose_name
class Watch(models.Model):
user = models.ForeignKey(User, verbose_name="用户", default="1", on_delete=models.CASCADE)
project = models.ForeignKey(Project, verbose_name="工程", on_delete=models.CASCADE)
create_time = models.DateTimeField(auto_now_add=True)
update_time = models.DateTimeField(auto_now=True)
class Meta:
db_table = 'Source_Watch'
verbose_name = "源码关注"
verbose_name_plural = verbose_name
class FileAnnoIssueSummary(models.Model):
project = models.ForeignKey(
Project, verbose_name='文件', on_delete=models.CASCADE)
file = models.ForeignKey(File, verbose_name='文件', on_delete=models.CASCADE)
anno_num = models.IntegerField(default=0, verbose_name='注释总数')
isuue_num = models.IntegerField(default=0, verbose_name='问题总数')
parent_path = models.CharField(default="",max_length=255, verbose_name='父文件夹路径')
class Meta:
db_table = 'File_Anno_Issue_Summary'
verbose_name = "文件注释问题总数"
verbose_name_plural = verbose_name
class Method(models.Model):
project = models.ForeignKey(Project, verbose_name='项目', on_delete=models.CASCADE)
file = models.ForeignKey(File, verbose_name='文件', on_delete=models.CASCADE)
line_num = models.IntegerField(default=0, verbose_name='代码总数')
name = models.CharField(default="",max_length=255, verbose_name='函数名')
class Meta:
db_table = 'Method'
verbose_name = "函数"
verbose_name_plural = verbose_name
class FileSummary(models.Model):
project = models.ForeignKey(
Project, verbose_name='文件', on_delete=models.CASCADE)
file = models.ForeignKey(File, verbose_name='文件', on_delete=models.CASCADE)
anno_num = models.IntegerField(default=0, verbose_name='注释总数')
isuue_num = models.IntegerField(default=0, verbose_name='系统问题总数')
question_num = models.IntegerField(default=0, verbose_name='用户提问总数')
parent_path = models.CharField(default="",max_length=512, verbose_name='父文件夹路径')
line_num = models.IntegerField(default=0, verbose_name='代码总数')
method_num = models.IntegerField(default=0, verbose_name='方法总数')
file_num = models.IntegerField(default=0, verbose_name='文件总数')
current_path = models.CharField(default="",max_length=512, verbose_name='文件路径')
class Meta:
db_table = 'File_Summary'
verbose_name = "文件汇总"
verbose_name_plural = verbose_name