简体   繁体   English

如何在 django 自定义用户 model 中使用多对多关系?

[英]How to use ManytoMany relationship in django custom user model?

My Custom User Model我的自定义用户 Model

from django.db import models
from django.contrib.auth.models import AbstractBaseUser,BaseUserManager



class UserManager(BaseUserManager):
    def create_user(self,email, first_name, last_name, role_id, org_id, status, created_by, modified_by, password=None, is_admin=False, is_staff=False):
        if not email:
            raise ValueError("email id is required")

        if not password:
            raise ValueError("password must required")

        if not first_name:
            raise ValueError("first_name is required")

        if not last_name:
            raise ValueError("last_name is required")

        if not role_id:
            raise ValueError("role_id is required")

        if not org_id:
            raise ValueError("org_id is required")

        if not status:
            raise ValueError("status is required")

        if not created_by:
            raise ValueError("created_by is required")

        if not modified_by:
            raise ValueError("modified_by is required")


        user_obj=self.model(
            email=self.normalize_email(email)
        )   

        user_obj.set_password(password)

        user_obj.first_name=first_name
        user_obj.last_name=last_name
        user_obj.role_id=role_id
        user_obj.org_id=org_id
        user_obj.status=status
        user_obj.created_by=created_by
        user_obj.modified_by=modified_by

        user_obj.admin=is_admin
        user_obj.staff=is_staff
        user_obj.save(using=self._db)
        return user_obj

    def create_staffuser(self,email,first_name, last_name, role_id, org_id, status, created_by, modified_by, password=None):
        user=self.create_user(
            email,
            first_name, 
            last_name, 
            role_id,
            org_id,
            status,
            created_by,
            modified_by,
            password=password,

            is_admin=False,
            is_staff=True
            )
        return user

    def create_superuser(self,email,first_name, last_name, role_id, org_id, status, created_by, modified_by, password=None):
        user=self.create_user(
            email,
            first_name, 
            last_name, 
            role_id,
            org_id,
            status,
            created_by,
            modified_by,    
            password=password,

            is_admin=True,
            is_staff=True
            )

        return user


Status = [
    ('Active', 'Active'),
    ('Inactive', 'Inactive'),
    ('Deleted', 'Deleted')
]

class User(AbstractBaseUser):
    username = None
    last_login = None

    email=models.EmailField(max_length=255,unique=True)
    admin=models.BooleanField(default=False)
    staff=models.BooleanField(default=False)

    first_name=models.CharField(max_length=200)
    last_name=models.CharField(max_length=200)
    role_id = models.ForeignKey('roles_tasks.mst_org_roles', on_delete=models.DO_NOTHING)
    org_id = models.ForeignKey('organizations.config_orgs', on_delete=models.DO_NOTHING)
    project_id = models.ManyToManyField('projects.mst_projects', blank=True)
    status = models.CharField(choices = Status, default = 'Active', max_length = 15)
    created_by = models.IntegerField(blank=True, null=True)
    created_date = models.DateTimeField(auto_now_add = True, blank=True, null=True)
    modified_by = models.IntegerField(blank=True, null=True)
    modified_date = models.DateTimeField(auto_now = True, blank=True, null=True)

    objects = UserManager()

    def get_first_name(self):
        return (self.first_name)

    def get_last_name(self):
        return (self.last_name)

    def get_user_id(self):
        return self.id

    def get_status(self):
        return self.status

    def has_perm(self,perm,obj=None):
        return True

    def has_module_perms(self,app_label):
        return True

    def __str__(self):
        return (self.email)


    USERNAME_FIELD="email"
    REQUIRED_FIELDS=['first_name', 'last_name', 'role_id', 'org_id', 'status', 'created_by', 'modified_by']


    @property
    def is_active(self):
        return self.status

    @property
    def is_admin(self):
        return self.admin

    @property
    def is_staff(self):
        return self.staff

I am using Django Rest Framework to create API for this User model.我正在使用 Django Rest 框架为此用户 Z20F35E630DAF499FA4C3F688C. When I try to add the user using this below-mentioned body.当我尝试使用下面提到的正文添加用户时。

{
    "first_name": "FName",
    "last_name": "LName",
    "role_id": 1,
    "org_id": 1,
    "project_id": [1,2],
    "created_by": 1,
    "modified_by": 1,
    "status": "Active",
    "email": "emailaddress@gmail.com",
    "password": "pass12345"
}

I am getting the output as我得到 output 作为

{
    "first_name": "FName",
    "last_name": "LName",
    "role_id": 1,
    "org_id": 1,
    "created_by": 1,
    "modified_by": 1,
    "status": "Active",
    "email": "emailaddress@gmail.com",
    "password": "pass12345"
}

project id is not getting added to database, Can Anybody help my with What has gone wrong?项目 ID 未添加到数据库中,有人可以帮助我解决什么问题吗?

I am using Djoser library for adding user我正在使用 Djoser 库添加用户

http://127.0.0.1:8000/auth/users/ http://127.0.0.1:8000/auth/users/

This is the endpoint in Djoser for creating the user.这是 Djoser 中用于创建用户的端点。

It seems that you are missing project assignment logic in your create_user() method.您的create_user()方法中似乎缺少项目分配逻辑。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用 Django 多对多关系的自定义连接查询 - Use custom join query with Django ManyToMany relationship 如何连接 Django Model 与多对多关系? - How to Connect a Django Model with ManyToMany Relationship? Django 如何使用多对多关系? - Django how to use a ManyToMany-Relationship? Django model 使用多对多关系设计购物清单? - Django model design for Shopping List with use of ManytoMany relationship? Django - 如何在 ManyToMany 关系中使用 delete() 来只删除一个关系 - Django - How to use delete() in ManyToMany relationships to only delete a single relationship 具有与Toct的ManyToMany关系的Django模型实例字段 - Django model instance fields with ManyToMany relationship to Dict Django将ManyToMany关系添加到管理员用户表单 - Django Add ManyToMany Relationship to Admin User Form 如何通过 Django 模型进行查询并在没有 ManyToMany 关系的情况下访问另一个 Django 模型? - How to query through a Django model and get access to another Django model without a ManyToMany relationship? 如何与Django用户模型建立一对一关系的自定义模型的Rest Api - How to build Rest Api for custom model with one to one relationship with django user model 如何在 Django 自定义用户 model 中使用两个字段作为用户名? - How to use two fields as username in Django custom user model?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM