Django model 设计

设计USER APP的model

User moedl 是比较重要的model,当框架所提供的model不能满足你的需求的时候,需要更改或者扩展user model. 扩展django user的方法有几种,这里介绍2种:

  • 继承AbstractUser  
  • 继承AbstractBaseUser

 继承AbstractUser 

继承AbstractUser  ,可以在框架原有的提供的用户表基础上扩展字段。

#model.py
from django.db import models
from django.contrib.auth.models import AbstractUser

class UserProfile(AbstractUser):
    nick_name = models.CharField(max_length=50, verbose_name=u"昵称", default="")
    birday = models.DateField(verbose_name=u"生日", null=True, blank=True)
    gender = models.CharField(max_length=6, choices=(("male",u"男"),("female","女")), default="female")
    address = models.CharField(max_length=100, default=u"")
    mobile = models.CharField(max_length=11, null=True, blank=True)
    image = models.ImageField(upload_to="image/%Y/%m",default=u"image/default.png", max_length=100)

    class Meta:
        verbose_name = "用户信息"
        verbose_name_plural = verbose_name

    def __unicode__(self):
        return self.username

 setting 里加入语句 AUTH_USER_MODEL = 'myapp.modelclass'

AUTH_USER_MODEL="users.UserProfile"

记得在 app 的 admin.py 中注册这个模式(为了使管理员界面中显示这个数据类型),xadmin可以自行百度。

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User
​
admin.site.register(User, UserAdmin)

继承 AbstractBaseUser 类

在 app 的 models 里面可以写入自定义的 USER字段,(上面2步setting和admin设置也是一样需要的)

#model.py
class MyUser(AbstractBaseUser):
    #保证至少有一个字段是 unique=True的
    identifier = models.CharField(max_length=40, unique=True)
    ...
    USERNAME_FIELD = 'identifier'
    #这里的 USERNAME_FIELD 字段是用作认证的,需要声明给 Django 知道,方便认证。

 

 

model设计是项目比较重要的一步,有一些需要注意的地方:

1、避免model间循环引用

2、分层设计:将model的操作(比如评论,收藏等)独立出来建立operation的独立的app

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值