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

各ユーザーのフィールドが異なるようにするにはどうすればよいですか。例。 1つは利用可能な時間フィールドを持っています。別のものにはアドレスフィールドがあります。異なる属性のユーザー

または、このようなことをしますか?

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

簡単な解決策は、ユーザーの種類ごとに異なるクラスを追加することです。新しいクラスはそれぞれ、メインのユーザープロファイルを持つ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 
+0

だから、それらのクラスのためには、クラスAタイプ(models.Model)でなければなりません...またはそれは、クラスAタイプ(custombaseprofile) – questnofinterest

+1

タイプA(models.Model)する必要があります: CustomUser = models.OneToOneField( 'CustomUser' ) –

+0

は、ユーザーをフィールドに割り当てるために使用されます。 user = get_object_or_404(settings.AUTH_USER_MODEL、pk = user_id) – questnofinterest

関連する問題