Проблема с сопоставлением иерархии пользователей для приложения управления отделом продаж - Django - PullRequest
0 голосов
/ 16 июня 2020

Мне нужна ваша помощь / руководство, так как я новичок в django - python веб-разработке, и я застрял в одном из своих проектов. Ниже приведен объясненный сценарий для вашей справки.

Проект: платформа веб-приложений для управления отделом продаж: Django - python

У этого приложения несколько пользователей Ie. заказчик, дилер, менеджер по продажам, региональный менеджер и администраторы. Поэтому мне нужно создать учетную запись для всех с соответствующими привилегиями. Все пользователи должны быть сопоставлены друг другу Ie. customer

Верхний пользователь может видеть данные своего сопоставленного нижнего пользователя.

** Что я сделал:

Я создал модели для всех пользователей и могу зарегистрировать их, используя просмотры.

Где я застрял:

Невозможно сопоставить пользователей друг с другом. Также требуется отображать верхнюю иерархию в виде раскрывающегося списка при регистрации. что я не могу сделать. **

Пожалуйста, помогите мне.

Заранее спасибо.

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)
...