博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django 之admin后台管理
阅读量:4709 次
发布时间:2019-06-10

本文共 13011 字,大约阅读时间需要 43 分钟。

数据库

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.name104 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.name225 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.name234 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 of240         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 = True252         user.save(using=self._db)253         return user254 255     def create_superuser(self,email, name, password):256         """257         Creates and saves a superuser with the given email, date of258         birth and password.259         """260         user = self.create_user(261             email,262             password=password,263             name=name,264         )265         user.is_active = True266         user.is_admin = True267         user.save(using=self._db)268         return user269 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=True278     )279     password = models.CharField(_('password'), max_length=128,280                                 help_text=mark_safe('''修改密码'''))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 address294         return self.email295 296     def get_short_name(self):297         # The user is identified by their email address298         return self.email299 300     def __str__(self):              # __unicode__ on Python 2301         return self.email302 303     # def has_perm(self, perm, obj=None):304     #     "Does the user have a specific permission?"305     #     # Simplest possible answer: Yes, always306     #     return True307     #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, always311     #     return True312 313     @property314     def is_staff(self):315         "Is the user a member of staff?"316         # Simplest possible answer: All admins are staff317         return self.is_active318 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.name339     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 adminfrom django.shortcuts import render,HttpResponse,redirectfrom django import formsfrom django.contrib.auth.models import Groupfrom django.contrib.auth.admin import UserAdmin as BaseUserAdminfrom django.contrib.auth.forms import ReadOnlyPasswordHashFieldfrom crm import models #自定义的数据库模版

 

导入模块的

 

转载于:https://www.cnblogs.com/noube/p/6498179.html

你可能感兴趣的文章
几个简单规则改进你的SEO效果
查看>>
UVA10820 Send a Table
查看>>
主流css reset的讲解分析(转载)
查看>>
OpenCV4Android Tutorial0解析
查看>>
Oracle数据库(一)
查看>>
SVD与文本摘要
查看>>
HDU 5451 广义斐波那契数列
查看>>
mysql5.6配置文件my.ini位置
查看>>
[BZOJ4820][SDOI2017]硬币游戏(高斯消元+KMP)
查看>>
构造矩阵解决这个问题 【nyoj299 Matrix Power Series】
查看>>
记点笔记
查看>>
网络编程——第三篇 HTTP应用编程(下)
查看>>
进程管理(Process类)
查看>>
Android进阶篇-访问Https链接
查看>>
rpm命令安装软件
查看>>
oracle相关操作,存储、临时表空间、用户操作、启动过程
查看>>
Python 2.基础
查看>>
数据库设计——评论回复功能
查看>>
Dll 使用 PChar 参数的小例子 - 回复 "linximf" 的问题
查看>>
跟我一起学kafka(一)
查看>>