[Django Homepage] jone models.py

from django.db import models
from ckeditor.fields import RichTextField
from ckeditor_uploader.fields import RichTextUploadingField
from filer.fields.image import FilerImageField
from filer.fields.file import FilerFileField
from django.shortcuts import get_object_or_404
from django.utils import timezone
from django.contrib.auth.models import User
from crum import get_current_user
from datetime import date

from .utils import send_sms

import logging

logger = logging.getLogger('appName')

# Define code

STATUS = (
    (1, 'Active'),
    (2, 'Inactive'),
)
CODE_CATEGORY = (
    (1, 'Category1'),
    (2, 'Category2'),
    (3, 'Category3'),
    (4, 'Category4'),
    (5, 'Category5'),
)
YESNO = (
    (1, 'YES'),
    (2, 'NO'),
)

# Define model

class Codegroup(models.Model):
    code_group_ko       = models.CharField(max_length=500)
    code_group_en       = models.CharField(max_length=500, blank=True)
    description         = models.TextField(blank=True)
    status              = models.IntegerField(choices=STATUS, default=1) 
    def __str__(self):
        return self.code_group_ko

class Code(models.Model):
    code_group          = models.ForeignKey(Codegroup, on_delete=models.PROTECT, related_name='code_code_group', blank=True, null=True)
    code_ko             = models.CharField(max_length=500)
    code_en             = models.CharField(max_length=500, blank=True)
    description         = models.TextField(blank=True)
    display_order       = models.IntegerField(default=0, blank=True)
    category            = models.IntegerField(choices=CODE_CATEGORY, default=1)
    default             = models.IntegerField(choices=YESNO, default=2)
    status              = models.IntegerField(choices=STATUS, default=1) 
    def __str__(self):
        return self.code_ko

class Content(models.Model):
    content_type        = models.ForeignKey(Code, on_delete=models.PROTECT, limit_choices_to={'code_group': get_object_or_404(Codegroup, code_group_en='content_type').id}, related_name='content_content_type', blank=True, null=True)
    content_type1       = models.ForeignKey(Code, on_delete=models.PROTECT, limit_choices_to={'code_group': get_object_or_404(Codegroup, code_group_en='content_type1').id}, related_name='content_content_type1', blank=True, null=True)
    name                = models.CharField(max_length=500)
    title               = models.CharField(max_length=500, blank=True)
    short_description   = models.TextField(blank=True)
    long_description    = models.TextField(blank=True)
    category            = models.ForeignKey(Code, on_delete=models.PROTECT, limit_choices_to={'code_group': get_object_or_404(Codegroup, code_group_en='category').id}, related_name='content_category', blank=True, null=True)
    process             = models.ForeignKey(Code, on_delete=models.PROTECT, limit_choices_to={'code_group': get_object_or_404(Codegroup, code_group_en='process').id}, related_name='content_process', blank=True, null=True)
    class_level         = models.ForeignKey(Code, on_delete=models.PROTECT, limit_choices_to={'code_group': get_object_or_404(Codegroup, code_group_en='class_level').id}, related_name='content_class_level', blank=True, null=True)
    university_line     = models.ForeignKey(Code, on_delete=models.PROTECT, limit_choices_to={'code_group': get_object_or_404(Codegroup, code_group_en='university_line').id}, related_name='content_university_line', blank=True, null=True)
    datetime            = models.DateTimeField(default=timezone.now)
    location            = models.CharField(max_length=500, blank=True)
    component           = models.ForeignKey(Code, on_delete=models.PROTECT, limit_choices_to={'code_group': get_object_or_404(Codegroup, code_group_en='component').id}, related_name='content_component', blank=True, null=True)
    url_type            = models.ForeignKey(Code, on_delete=models.PROTECT, limit_choices_to={'code_group': get_object_or_404(Codegroup, code_group_en='url_type').id}, related_name='content_url_type', blank=True, null=True)
    url                 = models.CharField(max_length=500, blank=True)
    url_parameter       = models.CharField(max_length=500, blank=True)
    display_order       = models.IntegerField(default=0, blank=True)
    query_count         = models.IntegerField(default=0, blank=True)
    status              = models.IntegerField(choices=STATUS, default=1)
    content_body        = RichTextUploadingField(blank=True, null=True)           
    image1              = FilerImageField(on_delete=models.PROTECT, null=True, blank=True, related_name="content_image1")
    image2              = FilerImageField(on_delete=models.PROTECT, null=True, blank=True, related_name="content_image2")
    image3              = FilerImageField(on_delete=models.PROTECT, null=True, blank=True, related_name="content_image3")
    image4              = FilerImageField(on_delete=models.PROTECT, null=True, blank=True, related_name="content_image4")
    image5              = FilerImageField(on_delete=models.PROTECT, null=True, blank=True, related_name="content_image5")
    file1               = FilerFileField(on_delete=models.PROTECT, null=True, blank=True, related_name="content_file1")
    file2               = FilerFileField(on_delete=models.PROTECT, null=True, blank=True, related_name="content_file2")
    file3               = FilerFileField(on_delete=models.PROTECT, null=True, blank=True, related_name="content_file3")
    text1               = models.CharField(max_length=500, blank=True)
    text2               = models.CharField(max_length=500, blank=True)
    text3               = models.CharField(max_length=500, blank=True)
    int1                = models.IntegerField(default=0, blank=True)
    int2                = models.IntegerField(default=0, blank=True)
    int3                = models.IntegerField(default=0, blank=True)
    creator             = models.ForeignKey(User, on_delete=models.PROTECT, related_name='content_creator', null=True, blank=True)      
    modifier            = models.ForeignKey(User, on_delete=models.PROTECT, related_name='content_modifier', null=True, blank=True)       
    created             = models.DateTimeField(default=timezone.now)
    modified            = models.DateTimeField(default=timezone.now)
    
    def __str__(self):
        return self.name

    def save(self, *args, **kwargs):
        ''' On save, update timestamps '''
        user = get_current_user()
    
        if not self.id:
            self.created = timezone.now()
            try:
                self.creator = user
            except:
                self.creator = self.creator
        self.modified = timezone.now()
        try:
            self.modifier = user
        except:
            self.modifier = self.modifier
        return super(Content, self).save(*args, **kwargs)

class Related(models.Model):
    content             = models.ForeignKey(Content, on_delete=models.PROTECT, related_name='related_content', blank=True, null=True)
    name                = models.CharField(max_length=500)
    title               = models.CharField(max_length=500, blank=True)
    short_description   = models.TextField(blank=True)
    long_description    = models.TextField(blank=True)
    category            = models.ForeignKey(Code, on_delete=models.PROTECT, limit_choices_to={'code_group': get_object_or_404(Codegroup, code_group_en='category').id}, related_name='related_category', blank=True, null=True)
    process             = models.ForeignKey(Code, on_delete=models.PROTECT, limit_choices_to={'code_group': get_object_or_404(Codegroup, code_group_en='process').id}, related_name='related_process', blank=True, null=True)
    class_level         = models.ForeignKey(Code, on_delete=models.PROTECT, limit_choices_to={'code_group': get_object_or_404(Codegroup, code_group_en='class_level').id}, related_name='related_class_level', blank=True, null=True)
    university_line     = models.ForeignKey(Code, on_delete=models.PROTECT, limit_choices_to={'code_group': get_object_or_404(Codegroup, code_group_en='university_line').id}, related_name='related_university_line', blank=True, null=True)
    datetime            = models.DateTimeField(default=timezone.now)
    location            = models.CharField(max_length=500, blank=True)
    component           = models.ForeignKey(Code, on_delete=models.PROTECT, limit_choices_to={'code_group': get_object_or_404(Codegroup, code_group_en='component').id}, related_name='related_component', blank=True, null=True)
    url_type            = models.ForeignKey(Code, on_delete=models.PROTECT, limit_choices_to={'code_group': get_object_or_404(Codegroup, code_group_en='url_type').id}, related_name='related_url_type', blank=True, null=True)
    url                 = models.CharField(max_length=500, blank=True)
    url_parameter       = models.CharField(max_length=500, blank=True)
    display_order       = models.IntegerField(default=0, blank=True)
    query_count         = models.IntegerField(default=0, blank=True)
    status              = models.IntegerField(choices=STATUS, default=1)   
    content_body        = RichTextUploadingField(blank=True, null=True)        
    image1              = FilerImageField(on_delete=models.PROTECT, null=True, blank=True, related_name="related_image1")
    image2              = FilerImageField(on_delete=models.PROTECT, null=True, blank=True, related_name="related_image2")
    image3              = FilerImageField(on_delete=models.PROTECT, null=True, blank=True, related_name="related_image3")
    image4              = FilerImageField(on_delete=models.PROTECT, null=True, blank=True, related_name="related_image4")
    image5              = FilerImageField(on_delete=models.PROTECT, null=True, blank=True, related_name="related_image5")
    file1               = FilerFileField(on_delete=models.PROTECT, null=True, blank=True, related_name="related_file1")
    file2               = FilerFileField(on_delete=models.PROTECT, null=True, blank=True, related_name="related_file2")
    file3               = FilerFileField(on_delete=models.PROTECT, null=True, blank=True, related_name="related_file3")
    text1               = models.CharField(max_length=500, blank=True)
    text2               = models.CharField(max_length=500, blank=True)
    text3               = models.CharField(max_length=500, blank=True)
    int1                = models.IntegerField(default=0, blank=True)
    int2                = models.IntegerField(default=0, blank=True)
    int3                = models.IntegerField(default=0, blank=True)
    creator             = models.ForeignKey(User, on_delete=models.PROTECT, related_name='related_creator', null=True, blank=True)      
    modifier            = models.ForeignKey(User, on_delete=models.PROTECT, related_name='related_modifier', null=True, blank=True)       
    created             = models.DateTimeField(default=timezone.now)
    modified            = models.DateTimeField(default=timezone.now)
    
    def __str__(self):
        return self.name

    def save(self, *args, **kwargs):
        ''' On save, update timestamps '''
        user = get_current_user()

        if not self.id:
            self.created = timezone.now()
            try:
                self.creator = user
            except:
                self.creator = self.creator
        self.modified = timezone.now()
        try:
            self.modifier = user
        except:
            self.modifier = self.modifier
        return super(Related, self).save(*args, **kwargs)

class Smsrelated(models.Model):
    content             = models.ForeignKey(Content, on_delete=models.PROTECT, related_name='smsrelated_content', blank=True, null=True)
    related             = models.ForeignKey(Content, on_delete=models.PROTECT, related_name='smsrelated_related', blank=True, null=True)
    name                = models.CharField(max_length=100)
    phone_number        = models.CharField(max_length=11)
    auth_number         = models.CharField(max_length=4)
    auth_flag           = models.CharField(max_length=20)
    marketing           = models.BooleanField(default=True)
    created             = models.DateTimeField(default=timezone.now)
    modified            = models.DateTimeField(default=timezone.now)
    
    def __str__(self):
        return self.name

    def save(self, *args, **kwargs):
        ''' On save, update timestamps '''
        if not self.id:
            self.created = timezone.now()
        self.modified = timezone.now()
        return super(Smsrelated, self).save(*args, **kwargs)

class Userdb(models.Model):
    phone_number        = models.CharField(max_length=11)
    auth_number         = models.CharField(max_length=4)
    auth_flag           = models.CharField(max_length=20)
    name                = models.CharField(max_length=100)
    school              = models.CharField(max_length=500)
    class_level         = models.ForeignKey(Code, on_delete=models.PROTECT, limit_choices_to={'code_group': get_object_or_404(Codegroup, code_group_en='class_level').id}, related_name='userdb_class_level')
    university_line     = models.ForeignKey(Code, on_delete=models.PROTECT, limit_choices_to={'code_group': get_object_or_404(Codegroup, code_group_en='university_line').id}, related_name='userdb_university_line')
    marketing           = models.BooleanField(default=True)
    created             = models.DateTimeField(default=timezone.now)
    modified            = models.DateTimeField(default=timezone.now)
    def __str__(self):
        return self.phone_number

    def save(self, *args, **kwargs):
        ''' On save, update timestamps '''
        if not self.id:
            self.created = timezone.now()
        self.modified = timezone.now()
        return super(Userdb, self).save(*args, **kwargs)

class Authsms(models.Model):
    phone_number        = models.CharField(max_length=11)
    auth_number         = models.IntegerField()
    auth_flag           = models.IntegerField(choices=YESNO, default=2)
    created             = models.DateTimeField(default=timezone.now)
    modified            = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.phone_number

    def save(self, *args, **kwargs):
        ''' On save, update timestamps '''
        if not self.id:
            self.created = timezone.now()
        self.modified = timezone.now()
        return super(Authsms, self).save(*args, **kwargs)

class Questiondb(models.Model):
    QUESTION_STATUS = (
        (1, '신청'),
        (2, '통보'),
    )
    phone_number        = models.CharField(max_length=11)
    auth_number         = models.CharField(max_length=4)
    auth_flag           = models.CharField(max_length=20)
    name                = models.CharField(max_length=100)
    question            = models.TextField(blank=True)
    status              = models.IntegerField(choices=QUESTION_STATUS, default=1)
    created             = models.DateTimeField(default=timezone.now)
    modified            = models.DateTimeField(default=timezone.now)
    def __str__(self):
        return self.phone_number

    def save(self, *args, **kwargs):
        ''' On save, update timestamps '''
        if not self.id:
            self.created = timezone.now()
        self.modified = timezone.now()

        sms_msg = '[1:1질문 신청] ' + self.name + '(' + self.phone_number + ') - ' + self.question
        sms_receiver = Code.objects.filter(code_group__code_group_en='sms_receiver')

        for receiver in sms_receiver:
            # logger.info('[SMS] ' + receiver.code_en + ' : ' + receiver.code_ko)
            send_sms(receiver.code_en, sms_msg)

        return super(Questiondb, self).save(*args, **kwargs)

class Obslog(models.Model):
    who_user                    = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name='obslog_what_user', null=True, blank=True)    # user username
    who_ip                      = models.CharField(max_length=50, blank=True, null=True)    # ip address
    who_useragent               = models.CharField(max_length=500, blank=True, null=True)   # usergent full string
    who_device                  = models.CharField(max_length=200, blank=True, null=True)   # device string
    who_device_type             = models.CharField(max_length=50, blank=True, null=True)    # device type
    who_device_family           = models.CharField(max_length=50, blank=True, null=True)    # device family
    who_device_brand            = models.CharField(max_length=50, blank=True, null=True)    # device brand
    who_device_model            = models.CharField(max_length=50, blank=True, null=True)    # device model
    who_os                      = models.CharField(max_length=200, blank=True, null=True)   # os string
    who_os_family               = models.CharField(max_length=50, blank=True, null=True)    # os family
    who_os_version_string       = models.CharField(max_length=50, blank=True, null=True)    # os version
    who_browser                 = models.CharField(max_length=200, blank=True, null=True)   # browser string
    who_browser_family          = models.CharField(max_length=50, blank=True, null=True)    # browser family
    who_browser_version_string  = models.CharField(max_length=50, blank=True, null=True)    # browser version
    what_object_type            = models.CharField(max_length=50, blank=True, null=True)    # page, content
    what_object_name            = models.CharField(max_length=50, blank=True, null=True)    # content type name
    what_object                 = models.ForeignKey(Content, on_delete=models.DO_NOTHING, related_name='obslog_what_object', null=True, blank=True)     # content/related id
    what_object_title           = models.CharField(max_length=500, blank=True, null=True)   # object title 
    when_datetime               = models.DateTimeField(default=timezone.now)                # datetime
    when_date                   = models.DateField(default=date.today)                      # date
    where_ip                    = models.CharField(max_length=50, blank=True, null=True)    # ip address
    where_continent             = models.CharField(max_length=50, blank=True, null=True)    # continent
    where_country               = models.CharField(max_length=50, blank=True, null=True)    # country
    where_city                  = models.CharField(max_length=50, blank=True, null=True)    # city
    where_zipcode               = models.CharField(max_length=50, blank=True, null=True)    # zipcode
    where_latitude              = models.CharField(max_length=50, blank=True, null=True)    # latitude
    where_longitude             = models.CharField(max_length=50, blank=True, null=True)    # longitude
    where_region                = models.CharField(max_length=50, blank=True, null=True)    # region
    where_timezone              = models.CharField(max_length=50, blank=True, null=True)    # timezone
    how_action                  = models.CharField(max_length=50, blank=True, null=True)    # signup, signin, signout, list, read, create, update, delete, cart, buy
    why                         = models.CharField(max_length=50, blank=True, null=True)    # reason
    created                     = models.DateTimeField(default=timezone.now)
    modified                    = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.who_ip

    def save(self, *args, **kwargs):
        ''' On save, update timestamps '''
        if not self.id:
            self.created = timezone.now()
        self.modified = timezone.now()
        return super(Obslog, self).save(*args, **kwargs)



댓글

이 블로그의 인기 게시물

[Django Install] 11. Install Python3 for Centos8/RedhatLinux8

[windows] filebeat 스케쥴링 테스트

[sqlite] error 조치