具有不同属性

时间:2017-12-07 18:40:40

标签: django django-models django-forms django-templates django-views

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)进行身份验证功能检查?没关系,我可以为每个页面制作单独的登录页面,但那会如何处理呢?

1 个答案:

答案 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