django踩坑记录(1)

前言

祝各位程序猿1024程序员节快乐
No +班,No bug,No 996.

Desc: 简单记录一下,使用Django开发的采坑记录,如果以后再遇到这种情况的时候,可以快速知道如何解决

0x01、设计表结构的几个重要点
  • 首先找出有哪些实体
  • 然后找出这些实体有哪些字段
  • 每个字段的类型、是否必填、长度是多少、是否存在默认值(有些字段是需要拿最小的单位去存储,避免从低精度转换到高精度的时候,出现丢失精度的情况)
实体1 <关系> 实体2

例如:在django开发在线教育网站里边,存在的实体如下:
课程 章节 视频 课程资源

实体1  <关系>  实体2
课程    章节   视频    课程资源
  │       │      │        │
  │       │      │        |
  │       │      └──1  :  N
  │       └──1 : N
  └── 1 : N



0x02、自定义扩展django的用户表格auth_user表格,增加自定义字段
字段详细描述
位置apps.users.models.BaseModel(类)
想要的功能描述django自带的auth_user表格的基本字段不能满足开发需要的时候,如何才能在基础的auth_user表格上面扩展增加字段呢
解决方法在users.models里面增加一个类,这个类的的内容如下:这个类一定要继承from django.contrib.auth.models import AbstractUser,即AbstractUser
from datetime import datetime

from django.db import models
from django.contrib.auth.models import AbstractUser  # 自定义扩展的类,即增加多与原来的字段,一定要继承这个类

GENDER_CHOICES = (
    ("male", "男"),
    ("female", "女")
)


class UserProfile(AbstractUser):
    """用户表.2019-10-18重载django默认的auth_user,自定义扩展字段,一定要继承AbstractUser这个类"""
    nick_name = models.CharField(max_length=50, verbose_name="昵称", default="")
    birthday = models.DateField(verbose_name="出生日期", null=True, blank=True)
    gender = models.CharField(max_length=6, verbose_name="性别", choices=GENDER_CHOICES)
    address = models.CharField(max_length=100, verbose_name="地址", default="")
    mobile = models.CharField(max_length=11, verbose_name="手机号码", unique=True)  # 注意手机号是唯一的
    image = models.ImageField(upload_to="head_image/%Y/%m", default="default.jpg")

    class Meta:
        verbose_name = "用户信息"
        verbose_name_plural = verbose_name  # 这个为了避免前端展示的时候出现“课程信息s”这个字眼

    def __str__(self):
        if self.nick_name:
            return self.nick_name
        else:
            return self.username
0x03、数据表字段“添加时间”一直出现异常
字段详细描述
位置apps.users.models.BaseModel(类)
异常描述后续添加的记录当中,所有的添加时间这个字段的时间都是一个时间,添加的时间都是项目启动的时候,编译的时间
解决方法字段里面的datetime.now()改为datetime.now
class BaseModel(models.Model):
    """这是公共的类"""
    add_time = models.DateField(default=datetime.now, verbose_name="添加时间")  
    # 一定要注意这里填写的是datetime.now而不是datetime.now(),
    # 如果是datetime.now()那么这个字段的时间就是编译时间,不是我们想要的添加时间

    class Meta:
        abstract = True  # 添加这个是避免生成一个单独的表格
0x04、如何避免添加一个基类,导致生成一个新的、单独的表格
字段详细描述
位置apps.users.models.BaseModel(类)
异常描述编写的这个BaseModel类只是作为一个公共的类来继承、扩展的,与此同时,他自动生成了一个新的表格,但这不是我想要的
解决方法在这个类的最后添加一个Meta,如: class Meta: abstract = True来达到避免生成一个新的、单独的表格
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值