[Django Homepage] 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

import logging

logger = logging.getLogger('project')

# Create your models here.

STATUS = (
    (1, 'Active'),
    (2, 'Inactive'),
)

class Code(models.Model):
    pid                 = models.ForeignKey('self', on_delete=models.PROTECT, related_name='code_pid', blank=True, null=True)
    name                = models.CharField(max_length=200, unique=True)
    title               = models.CharField(max_length=200, blank=True, null=True)
    description         = models.TextField(blank=True, null=True)
    display_order       = models.IntegerField(default=0, blank=True, null=True)

    status              = models.IntegerField(choices=STATUS, default=1)
    creator             = models.ForeignKey(User, on_delete=models.PROTECT, related_name='code_creator', null=True, blank=True)      
    modifier            = models.ForeignKey(User, on_delete=models.PROTECT, related_name='code_modifier', null=True, blank=True)       
    created             = models.DateTimeField(default=timezone.now)
    modified            = models.DateTimeField(default=timezone.now)
    
    def __str__(self):
        # if self.pid:
        #     return_msg = str(self.pid) + '.' + str(self.name)
        # else:
        #     return_msg = str(self.name)
        return self.title

    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(Code, self).save(*args, **kwargs)

def get_code_id(code_name):
    try:
        type_id = Code.objects.get(name=code_name).id
    except:
        type_id = 0

    return {'pid': type_id}

class Content(models.Model):
    type                = models.ForeignKey(Code, on_delete=models.PROTECT, limit_choices_to=get_code_id('content_type'), related_name='content_type', blank=True, null=True)
    style               = models.ForeignKey(Code, on_delete=models.PROTECT, limit_choices_to=get_code_id('content_style'), related_name='content_style', blank=True, null=True)
    category            = models.ForeignKey(Code, on_delete=models.PROTECT, limit_choices_to=get_code_id('content_category'), related_name='content_category', blank=True, null=True)
    
    pid                 = models.ForeignKey('self', on_delete=models.PROTECT, related_name='content_pid', blank=True, null=True)
    
    name                = models.CharField(max_length=500)
    title               = models.CharField(max_length=500)
    description         = models.TextField(blank=True, null=True)
    
    url_type            = models.ForeignKey(Code, on_delete=models.PROTECT, limit_choices_to=get_code_id('url_type'), 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)
    icon                = models.CharField(max_length=200, blank=True)
    view_count          = models.IntegerField(default=0, blank=True)
    display_order       = models.IntegerField(default=0, blank=True, null=True)

    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")
    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)

    status              = models.IntegerField(choices=STATUS, default=1)

    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):
        if self.pid:
            return_msg = str(self.pid) + '.' + str(self.name)
        else:
            return_msg = str(self.name)
        return return_msg

    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 Obslog(models.Model):
    who_user_id                 = models.IntegerField(blank=True, null=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, related
    what_object_name            = models.CharField(max_length=50, blank=True, null=True)    # page name, content/related name
    what_object_id              = models.IntegerField(blank=True, null=True)                # content/related id
    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):
        if self.who_ip is None:
            return ''
        else:
            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 조치