zoukankan      html  css  js  c++  java
  • django xadmin拓展User模型

    django提供四种拓展模型的方法:

    1.代理模型

    2.Profile拓展模型User

    3.AbstractBaseUser拓展模型User

    4.AbstractUser拓展模型

    之前想通过第四种方法拓展User模型,对原有User模型影响较少而且不需要创建数据表,但是由于项目的其他模型已经使用User作为一对多或者多对多的外键,导致替换过程有很多错误,没能解决而放弃该方法,所以建议大家在项目开始做前就使用该方法拓展User模型。

    下面简单介绍一下该方法:

    1.新建APP user,在user的model.py文件下定义模型MyUser:

    class MyUser(AbstractUser):
        qq = models.CharField('QQ号码',max_length=16)
    
        def __str__(self):
            return self.username

    2.在项目的setting.py中配置相关信息:

    AUTH_USER_MODEL='user.MyUser'

    3.然后执行数据迁移

    方法二:Profile拓展模型User

    该方法会新建数据表,适合用在项目完成过程中

    1.创建app UserProfile,在他的model.py文件下添加如下代码:

    from django.contrib.auth.models import User
    from django.db import models
    
    # Create your models here.
    
    class UserProfile(models.Model):
        user = models.OneToOneField('auth.User',related_name='profile_user')
        pid = models.ForeignKey('auth.User',verbose_name='上级用户',related_name='profile_pid')
    
        class Meta:
            db_table = "bjra_userprofile"

    2.执行数据迁移:python manage.py makemagrations  和 python manage.py migrate

    3.添加以及修改时将其添加到界面中,需要重新注册User模型

    在UserProfile/adminx.py文件夹下添加

    class ProfileInline(object):
        model = UserProfile
        fk_name = 'user'
        #raw_id_fields = ("pid",)
        verbose_name = '上级用户'
        verbose_name_plural = verbose_name
    class UserProfileAdmin(object):
        inlines = [ProfileInline]
        list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff')
    xadmin.site.unregister(User)  #去掉在admin中的注册
    xadmin.site.register(User, UserProfileAdmin)  #用userProfileAdmin注册user

    遇到的问题:由于UserProfile模型中存在多个外键关联同一模型User的情况,(第一个user与User模型是一对一关系,pid是指该用户的上级用户,因此是User的外键)因此在model中要指明其related_name的值,并且在ProfileInline中也要利用fk_name = 'user'来指定

    (模型上的外键名称。在大多数情况下,将自动处理,但fk_name如果同一父模型有多个外键,则必须明确指定。)

    参考官方文档:

  • 相关阅读:
    文本表征:SoW、BoW、TF-IDF、Hash Trick、doc2vec、DBoW、DM
    词表征 3:GloVe、fastText、评价词向量、重新训练词向量
    词表征 2:word2vec、CBoW、Skip-Gram、Negative Sampling、Hierarchical Softmax
    词表征 1:WordNet、0-1表征、共现矩阵、SVD
    机器学习基石笔记:Homework #4 Regularization&Validation相关习题
    机器学习基石笔记:16 Three Learning Principles
    [JavaEE] 了解Java连接池
    [JavaEE] Maven简介
    [MySQL] 按日期进行统计(前一天、本周、某一天)
    [MySQL] 按年度、季度、月度、周、日统计查询
  • 原文地址:https://www.cnblogs.com/ttzz/p/10752776.html
Copyright © 2011-2022 走看看