python-3.x - 销售团队管理应用程序的用户层次结构映射问题 - Django
问题描述
我需要你的帮助/指导,因为我是 django-python web 开发的新手,我被困在我的一个项目中。以下是解释的场景供您参考。
项目:销售团队管理webapp平台:Django-python
这个应用程序有多个用户即。客户、经销商、销售经理、区域经理和管理员。所以我需要为他们所有人创建具有各自权限的帐户。所有的用户都应该相互映射,即。顾客
上层用户可以看到他们映射的下层用户的数据。
**我做了什么:
我已经为所有用户创建了模型,并且能够使用视图让他们注册。
我被困在哪里:
无法将用户相互映射还希望在注册时将上层层次结构显示为选择下拉列表。我做不到。**
请帮我。
提前致谢。
from django.contrib.auth.models import User
from django.db import models
from django.contrib import auth
roles = (
('DGM', 'DGM'),
('RM', 'RM'),
('ASM', 'ASM'),
('TSE', 'TSE'),
('Dealer', 'Dealer'),
('Painter', 'Painter')
)
class Depot(models.Model):
depot_id = models.CharField(max_length=20, auto_created=True,
unique=True, verbose_name='ID')
depot_name = models.CharField(max_length=100, null=True)
depot_address = models.CharField(max_length=200, null=True)
depot_user = models.OneToOneField(User, on_delete=models.CASCADE)
class DGM(models.Model):
dgm_id = models.AutoField(auto_created=True, primary_key=True,
serialize=True, verbose_name='ID')
dgm_first_name = models.CharField(max_length=150)
dgm_last_name = models.CharField(max_length=100, null=True)
dgm_mobile = models.CharField(max_length=10)
dgm_email = models.CharField(max_length=100, null=True)
dgm_image = models.ImageField(upload_to='dgm_pics', null=True,
default='user_icon.png')
role = models.CharField(max_length=40, default='DGM')
dgm_depot = models.ManyToManyField(Depot)
dgm_state = models.CharField(max_length=100, choices=states)
dgm_user = models.OneToOneField(User, null=True,
on_delete=models.CASCADE)
class RM(models.Model):
username_rm = models.CharField(max_length=100)
rm_id = models.AutoField(auto_created=True, primary_key=True,
serialize=True, verbose_name='ID')
rm_first_name = models.CharField(max_length=150)
rm_password = models.CharField(max_length=50,null=True)
rm_last_name = models.CharField(max_length=100, null=True)
rm_mobile = models.CharField(max_length=10)
rm_email = models.CharField(max_length=100, null=True)
rm_image = models.ImageField(upload_to='rm_pics', null=True,
default='user_icon.png')
role = models.CharField(max_length=50, default='RM')
rm_depot = models.CharField(max_length=100, choices=depot)
rm_state = models.CharField(max_length=100, choices=states)
rm_dgm = models.ForeignKey(DGM, null=True, on_delete=models.SET_NULL)
rm_user = models.OneToOneField(User, null=True,
on_delete=models.CASCADE)
class ASM(models.Model):
username_asm = models.CharField(max_length=100,null=True)
asm_password = models.CharField(max_length=50,null=True)
asm_id = models.AutoField(auto_created=True, primary_key=True, serialize=True, verbose_name='ID')
asm_first_name = models.CharField(max_length=150)
asm_last_name = models.CharField(max_length=100, null=True)
asm_mobile = models.CharField(max_length=10)
asm_depot = models.CharField(max_length=100, choices=depot)
asm_state = models.CharField(max_length=100, choices=states)
role = models.CharField(max_length=20, default='ASM')
asm_dgm = models.ForeignKey(DGM, null=True, on_delete=models.SET_NULL)
asm_rm = models.ForeignKey(RM, null=True, on_delete=models.SET_NULL)
asm_user = models.OneToOneField(User, null=True,
on_delete=models.CASCADE)
class TSE(models.Model):
username_tse = models.CharField(max_length=100,null=True)
tse_password = models.CharField(max_length=50,null=True)
tse_id = models.AutoField(auto_created=True, primary_key=True,
serialize=True, verbose_name='ID')
tse_first_name = models.CharField(max_length=150)
tse_last_name = models.CharField(max_length=100, null=True)
tse_mobile = models.CharField(max_length=10)
tse_depot = models.CharField(max_length=100, choices=depot)
tse_state = models.CharField(max_length=100, choices=states)
tse_city = models.CharField(max_length=150)
tse_image = models.ImageField(upload_to='tse_pics', null=True,
default='user_icon.png')
role = models.CharField(max_length=20, default='TSE')
tse_dgm = models.ForeignKey(DGM, null=True, on_delete=models.SET_NULL)
tse_rm = models.ForeignKey(RM, null=True, on_delete=models.SET_NULL)
tse_asm = models.ForeignKey(ASM, null=True, on_delete=models.SET_NULL)
tse_user = models.OneToOneField(User, null=True,
on_delete=models.CASCADE)
class Dealer(models.Model):
username_d = models.CharField(max_length=100,null=True)
tse_password = models.CharField(max_length=50,null=True)
dealer_id = models.AutoField(auto_created=True, primary_key=True,
serialize=True, verbose_name='ID')
dealer_first_name = models.CharField(max_length=150)
dealer_last_name = models.CharField(max_length=100, null=True)
dealer_shopname = models.CharField(max_length=254, null=True)
dealer_mobile = models.CharField(max_length=10)
dealer_depot = models.CharField(max_length=100, choices=depot)
dealer_state = models.CharField(max_length=100, choices=states)
dealer_city = models.CharField(max_length=150)
tse_image = models.ImageField(upload_to='dealer_pics', null=True,
default='user_icon.png')
role = models.CharField(max_length=20, default='Dealer')
dealer_dgm = models.ForeignKey(DGM, null=True,
on_delete=models.SET_NULL)
dealer_rm = models.ForeignKey(RM, null=True,
on_delete=models.SET_NULL)
dealer_asm = models.ForeignKey(ASM, null=True,
on_delete=models.SET_NULL)
dealer_tse = models.ForeignKey(TSE, null=True,
on_delete=models.SET_NULL)
dealer_user = models.OneToOneField(User, null=True,
on_delete=models.CASCADE)
class Painter(models.Model):
username_p = models.CharField(max_length=100 , null=True)
password1 = models.CharField(max_length=40, default='painterpass')
password2 = models.CharField(max_length=40, null=True)
p_id = models.AutoField(auto_created=True, primary_key=True, serialize=True, verbose_name='ID')
p_first_name = models.CharField(max_length=150)
p_last_name = models.CharField(max_length=100, null=True)
p_mobile = models.CharField(max_length=10)
p_address = models.CharField(max_length=300, null=True)
p_city = models.CharField(max_length=100, null=True)
p_state = models.CharField(max_length=100, null=True)
p_depot = models.CharField(max_length=150, null=True)
p_zone = models.CharField(max_length=100, null=True)
p_image = models.ImageField(upload_to='painter_pics', null=True, default='user_icon.png')
p_balance = models.FloatField(default=0)
role = models.CharField(max_length=20, default='Painter')
p_dealer = models.ForeignKey(Dealer, null=True, on_delete=models.SET_NULL)
p_tse = models.ForeignKey(TSE, null=True, on_delete=models.SET_NULL)
p_asm = models.ForeignKey(ASM, null=True, on_delete=models.SET_NULL)
p_rm = models.ForeignKey(RM, null=True, on_delete=models.SET_NULL)
p_dgm = models.ForeignKey(DGM, null=True, on_delete=models.SET_NULL)
p_user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
USERNAME_FIELD = models.CharField(unique=True, verbose_name='username', max_length=100)
解决方案
推荐阅读
- amazon-web-services - AWS IAM 角色和 STS
- php - 未定义的变量:第 60 行 NULL Phalcon 上的用户视图
- python - /accounts/sign_up/ create() 处的 TypeError 采用 1 个位置参数,但给出了 2 个
- f# - F# 这个值不是函数
- implode - 剪辑 我想在使用 implod$ 断言新事实之前将我的插槽组合在一起
- android - 我无法运行我的项目,出现类似 ERROR: Failed to resolve: androidx 之类的错误
- python - 在浮点数中打印数字
- html - 如何拥有可在移动设备和桌面设备上并排使用的部分
- php - 什么数据存储在我的 POST 表单中的 SELECT 输入
- python - 为什么烧瓶自动调试在 ubuntu 中不起作用