处理3个不同的用户+;django中的管理员用户?
我正在进入django,我正在使用drf构建一个restful api,但我有4个不同的用户 管理员,他可以访问管理员面板 可以在站点上执行任何操作但无法访问管理面板的代理 只能执行两个操作的买家购买和搜索 中间的人,除了一件事外,什么都能做。 我现在的做法是,我有一个基类,其中包含用户之间的所有共享字段处理3个不同的用户+;django中的管理员用户?,django,django-models,django-admin,Django,Django Models,Django Admin,我正在进入django,我正在使用drf构建一个restful api,但我有4个不同的用户 管理员,他可以访问管理员面板 可以在站点上执行任何操作但无法访问管理面板的代理 只能执行两个操作的买家购买和搜索 中间的人,除了一件事外,什么都能做。 我现在的做法是,我有一个基类,其中包含用户之间的所有共享字段 class siteuser(models.Model): name = models.CharField( max_length=255, null=False, bl
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个模型,它们具有不同的字段和与用户模型的一对一关系
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-我一直在寻找创建自己的抽象基类用户模型,然后使用该模型作为我的用户模型,并使用管理员用户的管理面板
2-将用户模型抽象3次,创建3个用户对象,为三个不同的用户创建自定义誓言,我认为这不是一个好方法
那么,你们认为什么是处理这个问题的最佳方法呢?我认为你们可以在siteuser中添加一个字段“type”,而不必创建3个模型“manager,buyer,seller”
我认为您可以在siteuser中添加一个字段“type”,而不必创建3个模型“manager、buyer、seller”
如果所有的用户类都有特殊字段,那么你的方法可能不是那么糟糕。但是你可以尝试这种方法,使用某种额外的字段,你可以存储与这些特殊字段相关的数据。例如:
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
...
因此,您不需要为经理
、买方
、卖方
创建多个表。保存机制很简单:
从myapp.models导入管理器
m = manager()
m.manager_licsences_number = '1-22-33-4'
..
m.save()
print(m.manager_licsences_number)
如果所有的用户类都有特殊字段,那么你的方法可能不是那么糟糕。但是你可以尝试这种方法,使用某种额外的字段,你可以存储与这些特殊字段相关的数据。例如:
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
...
因此,您不需要为经理
、买方
、卖方
创建多个表。保存机制很简单:
从myapp.models导入管理器
m = manager()
m.manager_licsences_number = '1-22-33-4'
..
m.save()
print(m.manager_licsences_number)
我忘了将其添加到代码中,但每个用户都有一个特殊字段我忘了将其添加到代码中,但每个用户都有一个特殊字段