在django中处理3个不同的用户+ admin用户?
我正在进入Django,我正在使用DRF来建立一个宁静的API,但我有4个不同的用户 管理员,他有权访问管理面板 经纪人谁可以在网站上做任何事情,但无法访问管理面板 买家谁只能做2动作买进并在中间,谁可以做一切,除了一件事 我现在正在做的方式是我的基类与用户之间在django中处理3个不同的用户+ admin用户?
class siteuser(models.Model):
name = models.CharField(
max_length=255, null=False, blank=False, db_index=True)
email = models.EmailField(max_length=254, unique=True)
address = models.CharField(max_length=255, null=False, blank=False)
city = models.CharField(max_length=254, null=False, blank=False)
active = models.BooleanField(default=1)
about = models.TextField()
class Meta:
abstract = True
,然后所有的共享字段进行搜索 的人,我有3个不同的领域和与用户模型的onetoone关系的其他模型
class manger(siteuser):
manger = models.OneToOneField(settings.AUTH_USER_MODEL)
manager_licsences_number = models.IntegerField()
class buyer(siteuser):
buyer = models.OneToOneField(settings.AUTH_USER_MODEL)
class seller(siteuser):
seller = models.OneToOneField(settings.AUTH_USER_MODEL)
trust_number = models.IntegerField()
,但我觉得这种方法是错误的,我不得不想法在我的脑海
1 - 我一直在寻找创造我自己的抽象基类的用户模型,然后使用该模型作为我的用户模型并使用admin用户的管理面板。
2-抽象的用户模型的3倍,使3个用户对象和构建自定义的宣誓,我认为这三个不同的用户是不是一个好办法
所以你们认为什么是处理的最佳方式这个 ?
如果所有的用户类有特殊的领域,那么也许你的方法并不是那么糟糕,但你可以尝试这种方法,在使用某种额外的领域时,可以存储与这些特殊领域相关的数据。例如:
class siteuser(models.Model):
broker = models.OneToOneField(settings.AUTH_USER_MODEL)
name = models.CharField(max_length = 255, null = False, blank = False, db_index = True)
email = models.EmailField(max_length = 254, unique = True)
address = models.CharField(max_length = 255, null = False, blank = False)
city = models.CharField(max_length = 254, null = False, blank = False)
active = models.BooleanField(default = 1)
about = models.TextField()
extra_field = models.CharField(max_length=255, null=True) #For special data
class manager(siteuser):
class Meta:
proxy = True
@property
def manager_licsences_number(self):
return self.extra_field
@manager_licsences_number.setter
def manager_licsences_number(self, value):
self.extra_field = value
...
因此,你不必为manager
,buyer
,seller
创建多个表。和保存mechanisom很简单: 从myapp.models进口部经理
m = manager()
m.manager_licsences_number = '1-22-33-4'
..
m.save()
print(m.manager_licsences_number)
我觉得你可以在siteuser添加一个字段“类型”和你没有创建3模式“马槽,买方,卖方”
class siteuser(models.Model):
USER_CHOICE = (
(1, 'manger'),
(2, 'buyer'),
(3, 'seller'),
)
broker = models.OneToOneField(settings.AUTH_USER_MODEL)
name = models.CharField(max_length = 255, null = False, blank = False, db_index = True)
email = models.EmailField(max_length = 254, unique = True)
address = models.CharField(max_length = 255, null = False, blank = False)
city = models.CharField(max_length = 254, null = False, blank = False)
active = models.BooleanField(default = 1)
about = models.TextField()
type = models.ChoiceField(choices=USER_CHOICE)
我忘了这个添加到代码,但每个用户有一个特殊的领域 – isaac
抱歉,我意识到一些错误代码 – isaac