• django 之admin后台管理


    数据库

      1 from django.db import models
      2 from django.contrib.auth.models import User
      3 from django.contrib.auth.models import (
      4     BaseUserManager, AbstractBaseUser,PermissionsMixin
      5 )
      6 from django.utils.translation import ugettext_lazy as _
      7 from django.utils.safestring import mark_safe
      8 
      9 # Create your models here.
     10 
     11 
     12 class Customer(models.Model):
     13     '''客户信息表'''
     14     name = models.CharField(max_length=32,blank=True,null=True,help_text="用户报名后请改为真实姓名")
     15     qq = models.CharField(max_length=64,unique=True)
     16     qq_name = models.CharField(max_length=64,blank=True,null=True)
     17     phone = models.CharField(max_length=64,blank=True,null=True)
     18     id_num = models.CharField(max_length=64,blank=True,null=True)
     19     email = models.EmailField(verbose_name="常用邮箱",blank=True,null=True)
     20     source_choices = ((0,'转介绍'),
     21                       (1,'QQ群'),
     22                       (2,'官网'),
     23                       (3,'百度推广'),
     24                       (4,'51CTO'),
     25                       (5,'知乎'),
     26                       (6,'市场推广')
     27                       )
     28 
     29     source = models.SmallIntegerField(choices=source_choices)
     30     referral_from = models.CharField(verbose_name="转介绍人qq",max_length=64,blank=True,null=True)
     31 
     32     consult_course = models.ForeignKey("Course",verbose_name="咨询课程")
     33     content = models.TextField(verbose_name="咨询详情")
     34     tags = models.ManyToManyField("Tag",blank=True,null=True)
     35     status_choices = ((0,'已报名'),
     36                       (1,'未报名'),
     37                       )
     38     status = models.SmallIntegerField(choices=status_choices,default=1)
     39     consultant = models.ForeignKey("UserProfile")
     40     memo = models.TextField(blank=True,null=True)
     41     date = models.DateTimeField(auto_now_add=True)
     42 
     43     def __str__(self):
     44         return "<%s %s>" %(self.qq,self.name)
     45 
     46     class Meta:
     47         verbose_name ="客户表"
     48         verbose_name_plural ="客户表"
     49 
     50 class Tag(models.Model):
     51     name = models.CharField(unique=True,max_length=32)
     52 
     53     def __str__(self):
     54         return self.name
     55 
     56     class Meta:
     57         verbose_name = "标签"
     58         verbose_name_plural = "标签"
     59 
     60 class CustomerFollowUp(models.Model):
     61     '''客户跟进表'''
     62     customer = models.ForeignKey("Customer")
     63     content = models.TextField(verbose_name="跟进内容")
     64     consultant = models.ForeignKey("UserProfile")
     65 
     66     intention_choices  = ((0,'2周内报名'),
     67                           (1,'1个月内报名'),
     68                           (2,'近期无报名计划'),
     69                           (3,'已在其它机构报名'),
     70                           (4,'已报名'),
     71                           (5,'已拉黑'),
     72                           )
     73     intention = models.SmallIntegerField(choices=intention_choices)
     74     date = models.DateTimeField(auto_now_add=True)
     75 
     76     def __str__(self):
     77         return "<%s : %s>" %(self.customer.qq,self.intention)
     78 
     79 
     80     class Meta:
     81         verbose_name = "客户跟进记录"
     82         verbose_name_plural = "客户跟进记录"
     83 
     84 class Course(models.Model):
     85     '''课程表'''
     86     name = models.CharField(max_length=64,unique=True)
     87     price = models.PositiveSmallIntegerField()
     88     period = models.PositiveSmallIntegerField(verbose_name="周期(月)")
     89     outline = models.TextField()
     90 
     91     def __str__(self):
     92         return self.name
     93 
     94     class Meta:
     95         verbose_name = "课程表"
     96         verbose_name_plural = "课程表"
     97 
     98 class Branch(models.Model):
     99     '''校区'''
    100     name = models.CharField(max_length=128,unique=True)
    101     addr = models.CharField(max_length=128)
    102     def __str__(self):
    103         return self.name
    104 
    105 
    106     class Meta:
    107         verbose_name = "校区"
    108         verbose_name_plural = "校区"
    109 
    110 class ClassList(models.Model):
    111     '''班级表'''
    112     branch = models.ForeignKey("Branch",verbose_name="校区")
    113     course = models.ForeignKey("Course")
    114     class_type_choices = ((0,'面授(脱产)'),
    115                           (1,'面授(周末)'),
    116                           (2,'网络班')
    117                           )
    118     contract = models.ForeignKey("ContractTemplate",blank=True,null=True)
    119 
    120     class_type = models.SmallIntegerField(choices=class_type_choices,verbose_name="班级类型")
    121     semester = models.PositiveSmallIntegerField(verbose_name="学期")
    122     teachers = models.ManyToManyField("UserProfile")
    123     start_date = models.DateField(verbose_name="开班日期")
    124     end_date = models.DateField(verbose_name="结业日期",blank=True,null=True)
    125 
    126     def __str__(self):
    127         return "%s %s %s" %(self.branch,self.course,self.semester)
    128 
    129     class Meta:
    130         unique_together = ('branch','course','semester')
    131         verbose_name_plural = "班级"
    132         verbose_name = "班级"
    133 
    134 class CourseRecord(models.Model):
    135     '''上课记录'''
    136     from_class = models.ForeignKey("ClassList",verbose_name="班级")
    137     day_num = models.PositiveSmallIntegerField(verbose_name="第几节(天)")
    138     teacher = models.ForeignKey("UserProfile")
    139     has_homework = models.BooleanField(default=True)
    140     homework_title = models.CharField(max_length=128,blank=True,null=True)
    141     homework_content = models.TextField(blank=True,null=True)
    142     outline = models.TextField(verbose_name="本节课程大纲")
    143     date = models.DateField(auto_now_add=True)
    144 
    145     def __str__(self):
    146         return "%s %s" %(self.from_class,self.day_num)
    147 
    148     class Meta:
    149         unique_together = ("from_class", "day_num")
    150         verbose_name_plural = "上课记录"
    151 
    152 
    153 class StudyRecord(models.Model):
    154     '''学习记录'''
    155     student = models.ForeignKey("Enrollment")
    156     course_record = models.ForeignKey("CourseRecord")
    157     attendance_choices = ((0,'已签到'),
    158                           (1,'迟到'),
    159                           (2,'缺勤'),
    160                           (3,'早退'),
    161                           )
    162     attendance = models.SmallIntegerField(choices=attendance_choices,default=0)
    163     score_choices = ((100,"A+"),
    164                      (90,"A"),
    165                      (85,"B+"),
    166                      (80,"B"),
    167                      (75,"B-"),
    168                      (70,"C+"),
    169                      (60,"C"),
    170                      (40,"C-"),
    171                      (-50,"D"),
    172                      (-100,"COPY"),
    173                      (0,"N/A"),
    174                      )
    175     score = models.SmallIntegerField(choices=score_choices,default=0)
    176     memo = models.TextField(blank=True,null=True)
    177     date = models.DateField(auto_now_add=True)
    178 
    179     def __str__(self):
    180         return "%s %s %s" %(self.student,self.course_record,self.score)
    181 
    182     class Meta:
    183         unique_together = ('student','course_record')
    184         verbose_name_plural = "学习记录"
    185 
    186 
    187 class Enrollment(models.Model):
    188     '''报名表'''
    189     customer = models.ForeignKey("Customer")
    190     enrolled_class = models.ForeignKey("ClassList",verbose_name="所报班级")
    191     consultant = models.ForeignKey("UserProfile",verbose_name="课程顾问")
    192     contract_agreed = models.BooleanField(default=False,verbose_name="学员已同意合同条款")
    193     contract_approved = models.BooleanField(default=False,verbose_name="合同已审核")
    194     date = models.DateTimeField(auto_now_add=True)
    195 
    196     def __str__(self):
    197         return "%s %s" %(self.customer,self.enrolled_class)
    198 
    199     class Meta:
    200         unique_together = ("customer","enrolled_class")
    201         verbose_name_plural = "报名表"
    202 
    203 class Payment(models.Model):
    204     '''缴费记录'''
    205     customer = models.ForeignKey("Customer")
    206     course = models.ForeignKey("Course",verbose_name="所报课程")
    207     amount = models.PositiveIntegerField(verbose_name="数额",default=500)
    208     consultant = models.ForeignKey("UserProfile")
    209     date = models.DateTimeField(auto_now_add=True)
    210 
    211     def __str__(self):
    212         return "%s %s" %(self.customer,self.amount)
    213 
    214     class Meta:
    215         verbose_name_plural = "缴费记录"
    216 
    217 # class UserProfile(models.Model):
    218 #     '''账号表'''
    219 #     user = models.OneToOneField(User)
    220 #     name = models.CharField(max_length=32)
    221 #     roles = models.ManyToManyField("Role",blank=True,null=True)
    222 #
    223 #     def __str__(self):
    224 #         return self.name
    225 
    226 
    227 class ContractTemplate(models.Model):
    228     '''合同模版'''
    229     name = models.CharField("合同名称",max_length=64,unique=True)
    230     template = models.TextField()
    231 
    232     def __str__(self):
    233         return self.name
    234 
    235 
    236 class UserProfileManager(BaseUserManager):
    237     def create_user(self, email, name, password=None):
    238         """
    239         Creates and saves a User with the given email, date of
    240         birth and password.
    241         """
    242         if not email:
    243             raise ValueError('Users must have an email address')
    244 
    245         user = self.model(
    246             email=self.normalize_email(email),
    247             name=name,
    248         )
    249 
    250         user.set_password(password)
    251         self.is_active = True
    252         user.save(using=self._db)
    253         return user
    254 
    255     def create_superuser(self,email, name, password):
    256         """
    257         Creates and saves a superuser with the given email, date of
    258         birth and password.
    259         """
    260         user = self.create_user(
    261             email,
    262             password=password,
    263             name=name,
    264         )
    265         user.is_active = True
    266         user.is_admin = True
    267         user.save(using=self._db)
    268         return user
    269 
    270 
    271 class UserProfile(AbstractBaseUser,PermissionsMixin):
    272     '''账号表'''
    273     email = models.EmailField(
    274         verbose_name='email address',
    275         max_length=255,
    276         unique=True,
    277         null=True
    278     )
    279     password = models.CharField(_('password'), max_length=128,
    280                                 help_text=mark_safe('''<a href='password/'>修改密码</a>'''))
    281     name = models.CharField(max_length=32)
    282     is_active = models.BooleanField(default=True)
    283     is_admin = models.BooleanField(default=False)
    284     roles = models.ManyToManyField("Role",blank=True)
    285     objects = UserProfileManager()
    286 
    287     stu_account = models.ForeignKey("Customer",verbose_name="关联学员账号",blank=True,null=True,
    288                                     help_text="只有学员报名后方可为其创建账号")
    289     USERNAME_FIELD = 'email'
    290     REQUIRED_FIELDS = ['name']
    291 
    292     def get_full_name(self):
    293         # The user is identified by their email address
    294         return self.email
    295 
    296     def get_short_name(self):
    297         # The user is identified by their email address
    298         return self.email
    299 
    300     def __str__(self):              # __unicode__ on Python 2
    301         return self.email
    302 
    303     # def has_perm(self, perm, obj=None):
    304     #     "Does the user have a specific permission?"
    305     #     # Simplest possible answer: Yes, always
    306     #     return True
    307     #
    308     # def has_module_perms(self, app_label):
    309     #     "Does the user have permissions to view the app `app_label`?"
    310     #     # Simplest possible answer: Yes, always
    311     #     return True
    312 
    313     @property
    314     def is_staff(self):
    315         "Is the user a member of staff?"
    316         # Simplest possible answer: All admins are staff
    317         return self.is_active
    318 
    319 
    320     class Meta:
    321         permissions = (('can_fuck_him_to_death','弄死小虎逼'),
    322                        ('can_access_my_course','可以访问我的课程'),
    323                        ('can_access_customer_list','可以访问客户列表'),
    324                        ('can_access_customer_detail','可以访问客户详细'),
    325                        ('can_access_studyrecords','可以访问学习记录页面'),
    326                        ('can_access_homework_detail','可以访问作业详情页面'),
    327                        ('can_upload_homework','可以交作业'),
    328                        ('access_kingadmin_table_obj_detail','可以访问kingadmin每个表的对象'),
    329                        ('change_kingadmin_table_obj_detail','可以修改kingadmin每个表的对象'),
    330                        )
    331 
    332 class Role(models.Model):
    333     '''角色表'''
    334     name = models.CharField(max_length=32,unique=True)
    335     menus = models.ManyToManyField("Menu",blank=True)
    336 
    337     def __str__(self):
    338         return self.name
    339     class Meta:
    340         verbose_name_plural = "角色"
    341 
    342 
    343 class Menu(models.Model):
    344     '''菜单'''
    345     name = models.CharField(max_length=32)
    346     url_type_choices = ((0,'alias'),(1,'absolute_url'))
    347     url_type = models.SmallIntegerField(choices=url_type_choices,default=0)
    348     url_name = models.CharField(max_length=64)
    349 
    350     def __str__(self):
    351         return self.name
    models.py

    admin配置

    导入模块

    from django.contrib import admin
    from django.shortcuts import render,HttpResponse,redirect
    from django import forms
    from django.contrib.auth.models import Group
    from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
    from django.contrib.auth.forms import ReadOnlyPasswordHashField
    from crm import models #自定义的数据库模版

    导入模块的

  • 相关阅读:
    合数分解为质数的乘积模板
    P2626 斐波那契数列(升级版)(合数的质数分解, 大数为素数的概率十分小的利用)
    1305 Pairwise Sum and Divide
    1344 走格子 (前缀和)
    1347 旋转字符串
    E
    pek (北大oj)3070
    数学中各种矩阵收集(转至其他博主)
    (数论)逆元的线性算法
    洛谷P2627 修剪草坪 题解 单调队列优化DP
  • 原文地址:https://www.cnblogs.com/noube/p/6498179.html
Copyright © 2020-2023  润新知