from enum import unique from statistics import mode from django.db import models class User(models.Model): creator = models.ForeignKey( 'self', on_delete=models.DO_NOTHING, related_name='created_users' ) created_at = models.DateTimeField(auto_now_add=True) modifier_id = models.IntegerField(blank=True, null=True) last_modified_at = models.DateTimeField(auto_now=True) deleted_at = models.DateTimeField(blank=True, null=True, default=None) username = models.CharField(max_length=150) name = models.CharField(max_length=128, blank=True, null=True) introduction = models.CharField(max_length=255, blank=True, null=True) avatar_url = models.CharField(max_length=255, blank=True, null=True) openid = models.CharField(max_length=255, unique=True) enable = models.BooleanField(default=True) phone_number = models.CharField(max_length=32, blank=True, null=True) company_name = models.CharField(max_length=100, blank=True, null=True) company_name = models.CharField(max_length=32, blank=True, null=True) roles = models.ManyToManyField('blog.Role', related_name='users', db_table='user_roles') class Meta: db_table = 'users' managed = False def __str__(self): return self.username class Role(models.Model): name = models.CharField(max_length=255) display_name = models.CharField(max_length=255) class Meta: db_table = 'roles' managed = False def __str__(self): return self.name class Tag(models.Model): creator_id = models.IntegerField(blank=True, null=True, default=1) created_at = models.DateTimeField(auto_now_add=True) modifier_id = models.IntegerField(blank=True, null=True, default=1) last_modified_at = models.DateTimeField(auto_now=True) deleted_at = models.DateTimeField(blank=True, null=True, default=None) name = models.CharField(max_length=64, unique=True) description = models.CharField(max_length=255, blank=True, null=True) slug = models.SlugField(max_length=128, unique=True) weight = models.IntegerField(default=10) class Meta: db_table = 'tags' managed = False def __str__(self): return self.name class Category(models.Model): creator_id = models.IntegerField(blank=True, null=True, default=1) created_at = models.DateTimeField(auto_now_add=True) modifier_id = models.IntegerField(blank=True, null=True, default=1) last_modified_at = models.DateTimeField(auto_now=True) deleted_at = models.DateTimeField(blank=True, null=True, default=None) name = models.CharField(max_length=64, unique=True) description = models.CharField(max_length=512, blank=True, null=True) slug = models.SlugField(max_length=128, unique=True) weight = models.IntegerField(default=10) class Meta: db_table = 'categories' managed = False def __str__(self): return self.name class Post(models.Model): STATUS_DRAFT = 'DRAFT' STATUS_PENDING = 'PENDING' STATUS_PUBLISHED = 'PUBLISHED' STATUS_REJECTED = 'REJECTED' STATUS_DELETED = 'DELETED' STATUS_CHOICES = ( (STATUS_PUBLISHED, '已发布'), (STATUS_DRAFT, '草稿'), (STATUS_PENDING, '待审核'), (STATUS_REJECTED, '已拒绝'), (STATUS_DELETED, '已删除'), ) ORIGIN_ORIGINAL = 'ORIGINAL' ORIGIN_REPOST = 'REPOST' ORIGIN_CHOICES = ( (ORIGIN_ORIGINAL, '原创'), (ORIGIN_REPOST, '转载'), ) creator = models.ForeignKey( 'blog.User', on_delete=models.DO_NOTHING, related_name='created_posts' ) created_at = models.DateTimeField(auto_now_add=True) modifier = models.ForeignKey( 'blog.User', on_delete=models.DO_NOTHING, related_name='modified_posts' ) last_modified_at = models.DateTimeField(auto_now=True) deleted_at = models.DateTimeField(blank=True, null=True, default=None) version = models.IntegerField(default=1) title = models.CharField(max_length=255, blank=True, null=True) content = models.TextField(blank=True, null=True) status = models.CharField(max_length=255, choices=STATUS_CHOICES, default=STATUS_DRAFT) origin = models.CharField(max_length=255, choices=ORIGIN_CHOICES, default=ORIGIN_ORIGINAL) source_url = models.CharField(max_length=512, blank=True, null=True) author = models.ForeignKey( 'blog.User', on_delete=models.DO_NOTHING, related_name='authored_posts' ) category = models.ForeignKey( 'blog.Category', on_delete=models.DO_NOTHING, blank=True, null=True ) recommended = models.BooleanField(default=False) recommender = models.ForeignKey( 'blog.User', on_delete=models.DO_NOTHING, related_name='recommended_posts' ) recommended_at = models.DateTimeField(blank=True, null=True) publisher = models.ForeignKey( 'blog.User', on_delete=models.DO_NOTHING, related_name='published_posts', blank=True, null=True ) published_at = models.DateTimeField(blank=True, null=True) cover_image_url = models.CharField(max_length=512, blank=True, null=True) slug = models.CharField(max_length=128, blank=True, null=True) from_topic_id = models.IntegerField(blank=True, null=True) last_published_at = models.DateTimeField(blank=True, null=True) last_publisher = models.ForeignKey( 'blog.User', on_delete=models.DO_NOTHING, related_name='last_published_posts', blank=True, null=True ) class Meta: db_table = 'posts' managed = False class Like(models.Model): # CREATE TABLE `likes` ( # `post_id` bigint(20) NOT NULL, # `user_id` bigint(20) NOT NULL, # `liked_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, # PRIMARY KEY (`post_id`,`user_id`), # .... # ) ENGINE=InnoDB DEFAULT CHARSET=utf8; # # Django do not support composite primary key, # due we won't insert/update records or make schema migration in this app, # so just set primary key on `user` to skip this issue. user = models.OneToOneField( 'blog.User', on_delete=models.DO_NOTHING, primary_key=True) post = models.ForeignKey( 'blog.Post', on_delete=models.DO_NOTHING) liked_at = models.DateTimeField(auto_now_add=True) class Meta: db_table = 'likes' managed = False unique_together = (('user', 'post'),) class Favorite(models.Model): # ditto. user = models.OneToOneField( 'blog.User', on_delete=models.DO_NOTHING, primary_key=True) post = models.ForeignKey( 'blog.Post', on_delete=models.DO_NOTHING) favorited_at = models.DateTimeField(auto_now_add=True) class Meta: db_table = 'favorites' managed = False unique_together = (('user', 'post'),)