2017-09-11 11 views
0

私は2種類のユーザーが必要なイントラネットWebアプリケーションを開発中です。 django管理者と特定のタイプのユーザから設定できる通常のユーザ - 従業員。別のユーザータイプを作成する

従業員タイプのユーザーには次のモデルがあります。

class Employee(models.Model): 
    emp_name = models.CharField(max_length=500) 
    slug = models.SlugField(unique=True, default='') 
    location = models.CharField(max_length=200) 
    email = models.EmailField() 
    experience = models.TextField(blank=True) 
    primary_skill = models.ManyToManyField(PrimarySkill) 
    secondary_skill = models.ManyToManyField(SecondarySkill) 

私は、公式ドキュメントごとと this articleとして、このようなOneToOneFieldを持ってみました:

user = models.OneToOneField(User, blank=True, null=True, on_delete=models.CASCADE) 

@receiver(post_save, sender=User) 
def create_employee(sender, instance, created, **kwargs): 
    if created: 
     Employee.objects.create(user=instance) 


@receiver(post_save, sender=User) 
def save_employee(sender, instance, **kwargs): 
    instance.employee.save() 

私はこれは私が何をしたいの反対であることに気づきました。管理者からユーザ が作成されるたびに、 のapp_employeeテーブルにエントリが作成されました。

は、私が欲しいのはこれです:

  • Employeeが作成されるたびに、私が作成したUserを必要としています。
  • 従業員が個別のサインアップフォームを使用して作成することができ、私はこのシナリオにアプローチするにはどうすればよい

emp_signup言いますか?

答えて

0

これは、articleに触発されたAbstractUserに基づくカスタムユーザーを使用してこれを実現しました。

AUTH_USER_MODEL = 'myapp.CustomUser' 

をそして、私はUserクラスを参照する必要がどこに、私は、ビューでは、私たちのカスタムユーザーを置き換える対象、get_user_model()を使用して:

class CustomUser(AbstractUser): 
    pass 

class Employee(CustomUser): 
    user = models.OneToOneField(settings.AUTH_USER_MODEL) 
    # other fields 

settings.pyで、私はその後、次のキーを追加しますフォームを次のように

views.py

from django.contrib.auth import get_user_model 

def user_profile(request): 
    User = get_user_model() 
    user = get_object_or_404(User, username=request.user.username) 
    return render(request, 'user/user_profile.html', { 
     'site_user': user 
    }) 

forms.py

class SignUpForm(UserCreationForm): 

    class Meta: 
     model = get_user_model() 
     fields = ('username', 'email', 'password1', 'password2',) 
関連する問題