创建自己的model.py文件

from django.db import models

from django.contrib.auth.models import (
BaseUserManager, AbstractBaseUser, AbstractUser
) # class MyUserManager(BaseUserManager):
# def create_user(self, email, name, password=None):
# """
# Creates and saves a User with the given email, date of
# birth and password.
# """
# if not email:
# raise ValueError('Users must have an email address')
#
# user = self.model(
# email=self.normalize_email(email),
# name=name,
# )
#
# user.set_password(password)
# user.save(using=self._db)
# return user
#
# def create_superuser(self, email, name, password):
# """
# Creates and saves a superuser with the given email, date of
# birth and password.
# """
# user = self.create_user(
# email,
# password=password,
# name=name,
# )
# user.is_admin = True
# user.save(using=self._db)
# return user
#
#
# class MyUser(AbstractBaseUser):
# email = models.EmailField(
# verbose_name='email address',
# max_length=255,
# unique=True,
# )
# # date_of_birth = models.DateField()
# name = models.CharField(max_length=32)
# is_active = models.BooleanField(default=True)
# is_admin = models.BooleanField(default=False)
#
# objects = MyUserManager()
#
# USERNAME_FIELD = 'email'
# REQUIRED_FIELDS = ['name']
#
# def __str__(self):
# return self.email
#
# def has_perm(self, perm, obj=None):
# "Does the user have a specific permission?"
# # Simplest possible answer: Yes, always
# return True
#
# def has_module_perms(self, app_label):
# "Does the user have permissions to view the app `app_label`?"
# # Simplest possible answer: Yes, always
# return True
#
# @property
# def is_staff(self):
# "Is the user a member of staff?"
# # Simplest possible answer: All admins are staff
# return self.is_admin # class UserInfo(AbstractBaseUser):
#
# avatar = models.ImageField(upload_to="img")
#
# class Blog(models.Model):
# info = models.CharField()
#
# class Artical(models.Model):
# title = models.CharField(max_length=128)
# publish_date = models.DateTimeField()
# author = models.ForeignKey(UserInfo, on_delete=models.CASCADE)
# content = models.OneToOneField(Blog, on_delete=models.CASCADE)
#
# class Commments(models.Model):
# user = models.ForeignKey(UserInfo, on_delete=models.CASCADE)
# c_time = models.DateTimeField()
# comments = models.CharField()
# artical = models.ForeignKey(Artical, on_delete=models.CASCADE)
# reply = models.ForeignKey("Commments", on_delete=models.CASCADE)
#
# class Tag(models.Model):
# tag_name = models.CharField()
# artical = models.ManyToManyField(Artical)
#
# class Category(models.Model):
# name = models.CharField(max_length=64)
# artical = models.ManyToManyField(Artical)
#
# class Praise(models.Model):
# tag = models.IntegerField()
# artical = models.ForeignKey(Artical, on_delete=models.CASCADE)
# user = models.ForeignKey(UserInfo, on_delete=models.CASCADE) class UserInfo(AbstractUser):
"""
用户信息表
"""
nid = models.AutoField(primary_key=True)
phone = models.CharField(max_length=11, null=True, unique=True)
avatar = models.FileField(upload_to="avatars/", default="avatars/default.png", verbose_name="头像")
create_time = models.DateTimeField(auto_now_add=True) blog = models.OneToOneField(to="Blog", to_field="nid", null=True, on_delete=models.CASCADE) def __str__(self):
return self.username # class Meta:
# verbose_name="用户"
# verbose_name_plural=verbose_name class Blog(models.Model):
"""
博客信息
"""
nid = models.AutoField(primary_key=True)
title = models.CharField(max_length=64) # 个人博客标题
site = models.CharField(max_length=32, unique=True) # 个人博客后缀
theme = models.CharField(max_length=32) # 博客主题 def __str__(self):
return self.title class Meta:
verbose_name="博客信息"
verbose_name_plural=verbose_name class Category(models.Model):
"""
个人博客文章分类
"""
nid = models.AutoField(primary_key=True)
title = models.CharField(max_length=32) # 分类标题
blog = models.ForeignKey(to="Blog", to_field="nid", on_delete=models.CASCADE) # 外键关联博客,一个博客站点可以有多个分类 def __str__(self):
return self.title class Meta:
verbose_name="分类"
verbose_name_plural=verbose_name class Tag(models.Model):
"""
标签
"""
nid = models.AutoField(primary_key=True)
title = models.CharField(max_length=32) # 标签名
blog = models.ForeignKey(to="Blog", to_field="nid", on_delete=models.CASCADE) # 所属博客 def __str__(self):
return self.title class Meta:
verbose_name="标签"
verbose_name_plural=verbose_name class Article(models.Model):
"""
文章
"""
nid = models.AutoField(primary_key=True)
title = models.CharField(max_length=50) # 文章标题
desc = models.CharField(max_length=255) # 文章描述
create_time = models.DateTimeField() # 创建时间 category = models.ForeignKey(to="Category", to_field="nid", null=True, on_delete=models.CASCADE)
user = models.ForeignKey(to="UserInfo", to_field="nid", on_delete=models.CASCADE)
tags = models.ManyToManyField( # 中介模型
to="Tag",
through="Article2Tag",
through_fields=("article", "tag"), # 注意顺序!!!
) comment_count = models.IntegerField(verbose_name="评论数", default=0)
updown = models.IntegerField(verbose_name="点赞数", default=0) def __str__(self):
return self.title class Meta:
verbose_name="文章"
verbose_name_plural=verbose_name class ArticleDetail(models.Model):
"""
文章详情表
"""
nid = models.AutoField(primary_key=True)
content = models.TextField()
article = models.OneToOneField(to="Article", to_field="nid", on_delete=models.CASCADE) class Meta:
verbose_name="文章内容"
verbose_name_plural=verbose_name class Article2Tag(models.Model):
"""
文章和标签的多对多关系表
"""
nid = models.AutoField(primary_key=True)
article = models.ForeignKey(to="Article", to_field="nid", on_delete=models.CASCADE)
tag = models.ForeignKey(to="Tag", to_field="nid", on_delete=models.CASCADE) class Meta:
unique_together = (("article", "tag"),)
verbose_name="文章对标签"
verbose_name_plural=verbose_name class ArticleUpDown(models.Model):
"""
点赞表
"""
nid = models.AutoField(primary_key=True)
user = models.ForeignKey(to="UserInfo", null=True, on_delete=models.CASCADE)
article = models.ForeignKey(to="Article", null=True, on_delete=models.CASCADE)
is_up = models.BooleanField(default=True) class Meta:
unique_together = (("article", "user"),)
verbose_name="点赞"
verbose_name_plural=verbose_name class Comment(models.Model):
"""
评论表
"""
nid = models.AutoField(primary_key=True)
article = models.ForeignKey(to="Article", to_field="nid", on_delete=models.CASCADE)
user = models.ForeignKey(to="UserInfo", to_field="nid", on_delete=models.CASCADE)
content = models.CharField(max_length=255) # 评论内容
create_time = models.DateTimeField(auto_now_add=True)
parent_comment = models.ForeignKey("self", null=True, blank=True, on_delete=models.CASCADE) def __str__(self):
return self.content class Meta:
verbose_name="评论"
verbose_name_plural=verbose_name

models.py

注册自己的models.py到admin后台

from django.contrib import admin
from jax import models # Register your models here. admin.site.register(models.UserInfo)
admin.site.register(models.Blog)
admin.site.register(models.Category)
admin.site.register(models.Tag)
admin.site.register(models.Article)
admin.site.register(models.Article2Tag)
admin.site.register(models.ArticleDetail)
admin.site.register(models.ArticleUpDown)
admin.site.register(models.Comment)

扩展django默认的用户表

# settings.py文件还可以更改语言类型

LANGUAGE_CODE = 'zh-hans'
settings.py

AUTH_USER_MODEL = 'jax.UserInfo'

django admin后台的简单使用的更多相关文章

  1. django博客项目6:Django Admin 后台发布文章

    在此之前我们完成了 Django 博客首页视图的编写,我们希望首页展示发布的博客文章列表,但是它却抱怨:暂时还没有发布的文章!如它所言,我们确实还没有发布任何文章,本节我们将使用 Django 自带的 ...

  2. Django Admin后台添加用户时出现报错:1452

    如果在使用Django Admin后台添加用户时出现报错: (1452, 'Cannot add or update a child row: a foreign key constraint fai ...

  3. django admin后台插件:django-suit入门

    去年9月底开始用django来做公司内部项目,开始对django有了一些了解,感觉django真的蛮强大的(也有很多人推荐flask,将来有空的话我会试试).今天的话只是介绍一个小东西,django管 ...

  4. Django admin 后台管理

    在App 文件夹下的 admin.py 文件中写入 from django.contrib import admin from app名 import models admin.site.site_h ...

  5. Django Admin后台管理模块的使用

    Admin后台管理模块的使用 Django的管理员模块是Django的标准库django.contrib的一部分.这个包还包括其它一些实用的模块: django.contrib.auth django ...

  6. Django - admin后台、auth权限

    admin后台 一.创建一个管理员用户 (1).设置时区.语言(可选步骤) 打开settings.py,改成下面那样 LANGUAGE_CODE = 'zh-Hans' TIME_ZONE = 'As ...

  7. django admin后台(数据库简单管理后台)

    只需要简单的几行胆码就可以生成一个完整的管理后台 这个就是django魅力之一 创建超级用户 python manage.py createsuperuser     ----  之后会提示输入用慕名 ...

  8. django admin后台提示没有static样式相关的文件

    问题现象: 将 DEBUG = TEMPLATE_DEBUG = False 设置为False后,访问admin的管理后台,没有样式了.  解决办法: vim settings.py 确保有下面的这两 ...

  9. 实现django admin后台到xadmin后台的转变

    虽然不做前端,还是喜欢好看的东西~.~ 之前同事估计也是功能实现没空管这个后台,前段时间闲的,稍微改了下外貌,前后对比下: Python3.5+Django1.9.7+Xadmin0.6.1 步骤如下 ...

随机推荐

  1. 运行django项目出现Invalid HTTP_HOST header: '192.168.1.111:8000'. You may need to add '192.168.1.111' to ALLOWED_HOSTS

    Request Method: GET Request URL: http://202.201.38.70:8000/angular Django Version: 1.11.3 Exception ...

  2. xbstream 备份恢复

    xbstream -x < ./backs/backup.xbstream  -C /dbnode/data/ innobackupex --defaults-file=/dbnode/etc/ ...

  3. 第二个MFC实例:GPA计算器

    一.目的:此文通过一个GPA计算器的制作,介绍基于对话框的应用程序的编程方法.常用控件的编程技巧以及控件外观的更改技巧. 二.功能描述:所谓GPA计算器,即进行GPA换算. 功能要求由如下几点: 1. ...

  4. 【UVA1515 算法竞赛入门指南】 水塘【最小割】

    题意: 输入一个h行w列的字符矩阵,草地用“#”表示,洞用"."表示.你可以把草改成洞,每格花费为d,也可以把洞填上草,每格花费为f.最后还需要在草和洞之间修围栏,每条边花费为b. ...

  5. jquery入门 动态调整div大小,使其宽度始终为浏览器宽度

    有时候我们需要设置宽度为整个浏览器宽度的div,当然我们可以使用相对布局的方式做到这一点,不过我们也可以用jquery来实现. <!doctype html> <html> & ...

  6. windows运行打开服务命令的方法 :

    windows运行打开服务命令的方法 : 在开始->运行,输入以下命令 1. gpedit.msc-----组策略 2. sndrec32-------录音机 3. Nslookup------ ...

  7. office excel 2010 破解版下载地址

    office excel 2010 破解版下载地址  http://www.xitongzhijia.net/soft/24189.html

  8. PollingProvider方法的使用及示例

    来自<sencha touch权威指南>第12章,374页开始 ----------------------------------------------------- PollingP ...

  9. 取得MapReduce的Thread Dump

    ====2016/5/20: 经过上级指示,为了MR性能调优,需要截取MR的服务器的线程堆栈(Thread Dump) 战友介绍的方法是这样的: ①.使用ps命令[ps -ef | grep java ...

  10. 如何注册facebook应用

    最近项目中要做第三方登录,其中就有facebook的,下面讲解一下如何在facebook中创建应用 1.登录facebook的开发者平台(https://developers.facebook.com ...