newmediamonitoring1/polls/models.py

165 lines
4.8 KiB
Python
Raw Normal View History

2020-08-20 07:38:42 +00:00
from django.db import models
2020-08-20 10:34:14 +00:00
import uuid
import datetime
2020-09-03 02:56:28 +00:00
from django.contrib.auth.models import User
2020-09-13 06:06:58 +00:00
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
2020-09-03 02:56:28 +00:00
from dashboard.models import Group
2020-08-20 07:38:42 +00:00
2020-08-20 10:34:14 +00:00
VERIFY_CODE_TYPE_CHOICES = (
(0, 'register'),
(1, 'password_recover'),
)
2020-09-03 02:56:28 +00:00
2020-08-20 10:34:14 +00:00
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)
2020-09-03 02:56:28 +00:00
category = models.IntegerField(
'category', choices=VERIFY_CODE_TYPE_CHOICES, default=0)
2020-08-20 10:34:14 +00:00
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()
2020-08-24 14:35:47 +00:00
return now <= self.timeouted
2020-08-20 10:34:14 +00:00
2020-09-03 02:56:28 +00:00
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
2020-08-20 10:34:14 +00:00
def __str__(self):
2020-09-03 09:46:04 +00:00
return self.content + ':' + self.user.username
2020-09-03 02:56:28 +00:00
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)
2020-09-13 06:06:58 +00:00
file = models.FileField(
upload_to='message/file/%Y/%m/%d/', null=True, blank=True)
2020-09-03 02:56:28 +00:00
class ImageMessage(Message):
2020-09-13 06:06:58 +00:00
file = models.FileField(
upload_to='resources/image/%Y/%m/%d/', null=True, blank=True)
2020-09-03 02:56:28 +00:00
class MessageRecord(models.Model):
pass
2020-09-13 06:06:58 +00:00
2020-09-03 02:56:28 +00:00
class ChatRecord(models.Model):
pass
2020-09-13 06:06:58 +00:00
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
2020-09-03 02:56:28 +00:00
2020-09-13 06:06:58 +00:00
class Meta:
verbose_name_plural = 'news categories'