from django.db import models
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
type_choices = (
('A', 'User Type A'),
('B', 'User Type B'),
('C', 'User Type C'),
)
user_type = models.CharField(max_length=2,
choices=type_choices,
default='C')
class UserDetails(model.Model):
type = models.OneToOneField('CustomUser')
extra_info = models.CharField(max_length=200)
如何让每个用户拥有不同的字段?例子。一个人有一个可用的小时字段。另一个人有一个地址栏。
或者我会做这样的事情吗?
class BaseUser(AbstractUser):
# all the common fields go here, for example:
email = models.EmailField(max_length=10,unique=True)
name = models.CharField(max_length=120)
class StoreOwnerUser(BaseUser):
# All Store Owner specific attribute goes here
balance = models.some_balance_field()
stores_owned = models.some_stores_owned_field()
class Meta:
verbose_name = 'Store Owner'
如果这是这样做的话:什么会被指定为AUTH_USER_MODEL?同样在登录时:user = authenticate(username = username,password = password)。从哪个表(CustomerUser或StoreOwnerUser)进行身份验证功能检查?没关系,我可以为每个页面制作单独的登录页面,但那会如何处理呢?
答案 0 :(得分:1)
一个简单的解决方案可能是为每种类型的用户添加不同的类。每个新类都将在您的主用户配置文件的OneToOneField中。
在views.py中创建新用户后,您可以根据显示的选项创建适当的用户类。
new_user = CustomUser.objects.create(user_type='desired_type')
if new_user.user_type == 'typeA':
user_A.objects.create(CustomerUser=new_user,) # add desired fields
elif new_user.user_type == 'typeB':
user_B.objects.create(CustomerUser=new_user,) # add desired fields