newmediamonitoring1/polls/models.py

165 lines
4.8 KiB
Python

from django.db import models
import uuid
import datetime
from django.contrib.auth.models import User
from django.db import models
from modelcluster.fields import ParentalKey, ParentalManyToManyField
from wagtail.core.models import Page, Orderable
from wagtail.core.models import Page
from wagtail.core.fields import RichTextField
from wagtail.admin.edit_handlers import FieldPanel, InlinePanel, MultiFieldPanel
from wagtail.images.edit_handlers import ImageChooserPanel
from wagtail.snippets.models import register_snippet
from dashboard.models import Group
VERIFY_CODE_TYPE_CHOICES = (
(0, 'register'),
(1, 'password_recover'),
)
class VerifyCode(models.Model):
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
code = models.CharField('code', max_length=8, null=False)
phone = models.CharField('phone', max_length=11, null=False)
timeouted = models.DateTimeField('timeouted', null=False)
category = models.IntegerField(
'category', choices=VERIFY_CODE_TYPE_CHOICES, default=0)
added = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
class Meta:
ordering = ["-added"]
def is_in_progress(self):
now = datetime.datetime.now()
return now <= self.timeouted
def __str__(self):
return self.phone + ':' + self.code
class Notice(models.Model):
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
user = models.ForeignKey(User, on_delete=models.CASCADE)
content = models.CharField('内容', max_length=256, null=False)
is_read = models.BooleanField('是否删除', default=False)
added = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
class Meta:
ordering = ["-added"]
def is_in_progress(self):
now = datetime.datetime.now()
return now <= self.timeouted
def __str__(self):
return self.content + ':' + self.user.username
MESSAGE_TYPE_CHOICES = (
(0, 'url'),
(1, 'file'),
(2, 'picture')
)
class Message(models.Model):
id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
category = models.IntegerField(
'category', choices=MESSAGE_TYPE_CHOICES, default=0)
send_from = models.ForeignKey(User, on_delete=models.CASCADE)
send_to = models.ForeignKey(Group, on_delete=models.CASCADE)
added = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
ordering = ["-added"]
def __str__(self):
return self.send_from + ':' + self.send_to
class URLMessage(Message):
title = models.CharField('title', max_length=256, null=False)
description = models.CharField('description', max_length=512, null=False)
image = models.CharField('image', max_length=256, null=True, blank=True)
url = models.CharField('url', max_length=256, null=True, blank=True)
class FileMessage(Message):
title = models.CharField('title', max_length=256, null=False)
file = models.FileField(
upload_to='message/file/%Y/%m/%d/', null=True, blank=True)
class ImageMessage(Message):
file = models.FileField(
upload_to='resources/image/%Y/%m/%d/', null=True, blank=True)
class MessageRecord(models.Model):
pass
class ChatRecord(models.Model):
pass
class NewsPage(Page):
date = models.DateField("Post date")
source = models.CharField(max_length=64)
intro = models.CharField(max_length=250)
body = RichTextField(blank=True)
categories = ParentalManyToManyField('polls.NewsCategory', blank=True)
def main_image(self):
gallery_item = self.gallery_images.first()
if gallery_item:
return gallery_item.image
else:
return None
content_panels = Page.content_panels + [
FieldPanel('date'),
FieldPanel('source'),
FieldPanel('categories'),
FieldPanel('intro'),
FieldPanel('body', classname="full"),
InlinePanel('gallery_images', label="Gallery images"),
]
class NewsPageGalleryImage(Orderable):
page = ParentalKey(NewsPage, on_delete=models.CASCADE,
related_name='gallery_images')
image = models.ForeignKey(
'wagtailimages.Image', on_delete=models.CASCADE, related_name='+'
)
caption = models.CharField(blank=True, max_length=250)
panels = [
ImageChooserPanel('image'),
FieldPanel('caption'),
]
@register_snippet
class NewsCategory(models.Model):
name = models.CharField(max_length=255)
panels = [
FieldPanel('name'),
]
def __str__(self):
return self.name
class Meta:
verbose_name_plural = 'news categories'