首页 > 解决方案 > 销售团队管理应用程序的用户层次结构映射问题 - 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)

标签: python-3.xdjangodjango-modelsdjango-forms

解决方案


推荐阅读