当前位置: 首页 > news >正文

django admin后台的简单使用

创建自己的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'

 

转载于:https://www.cnblogs.com/ttyypjt/p/10593969.html

相关文章:

  • 详解Apache配置多个监听端口和不同的网站目录
  • 深度优先遍历 和 广度优先遍历
  • 如何利用 Webshell 诊断 EDAS Serverless 应用
  • web接口中BigDecimal值比较不相等
  • Cable:360实现的新虚拟网络架构
  • ubuntu添加普通用户,并解决远程登录
  • 扫描自定义注解并在spring容器中注入自定义bean
  • Mac osx 系统安装 eclipse
  • 项目实战8.2-Linux下Tomcat开启查看GC信息
  • CopyTranslator v0.0.8 Zouwu RC1 发布
  • Mars 1.3.0 发布,微信官方跨平台跨业务终端基础组件
  • 华为6.0系统(亲测有效)激活XPOSED框架的方法
  • SOP 1.1.0 发布,开放平台解决方案项目
  • c# webapi上传、读取、删除图片
  • JAVA面向对象的总结(函数重载与数组)
  • 【EOS】Cleos基础
  • Angular 响应式表单 基础例子
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • java中的hashCode
  • miaov-React 最佳入门
  • PHP 的 SAPI 是个什么东西
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • ReactNative开发常用的三方模块
  • Redis 中的布隆过滤器
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 力扣(LeetCode)21
  • 那些被忽略的 JavaScript 数组方法细节
  • Prometheus VS InfluxDB
  • Spring Batch JSON 支持
  • 大数据全解:定义、价值及挑战
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #pragam once 和 #ifndef 预编译头
  • #传输# #传输数据判断#
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (4)事件处理——(7)简单事件(Simple events)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (翻译)terry crowley: 写给程序员
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (转)mysql使用Navicat 导出和导入数据库
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .Net8 Blazor 尝鲜
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .skip() 和 .only() 的使用
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @html.ActionLink的几种参数格式
  • [ C++ ] STL---仿函数与priority_queue
  • [2023-年度总结]凡是过往,皆为序章
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [C#]扩展方法