としてuser
インスタンスを使用することができます新しいユーザーが作成されると、インスタンスが自動的に作成されます。
models.py
from django.db.models.signals import *
from __future__ import unicode_literals
class Employee(models.Model):
userName = models.OneToOneField(User, related_name='profile')
department = models.CharField(max_length=100, null=True)
def __unicode__(self): # __str__
return unicode(self.userName)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Employee.objects.create(userName=instance)
post_save.connect(create_user_profile, sender=User)
新しいユーザーが作成されたとき、これは自動的に(空白のインスタンスのデータが後に追加することができます)、従業員のインスタンスを作成します。
ユーザーモデルを拡張したいとユーザを作成しながら、さらに情報を追加したい場合は、ジャンゴ・betterforms(http://django-betterforms.readthedocs.io/en/latest/multiform.html)を使用することができます
models.py
from django.db.models.signals import *
from __future__ import unicode_literals
class Employee(models.Model):
userName = models.OneToOneField(User, related_name='profile')
department = models.CharField(max_length=100)
def __unicode__(self): # __str__
return unicode(self.userName)
forms.py
from django import forms
from django.forms import ModelForm
from betterforms.multiform import MultiModelForm
from django.contrib.auth.forms import UserCreationForm
from .models import *
class EmployeeForm(ModelForm):
class Meta:
model = Employee
exclude = ('userName',)
class addEmployeeMultiForm(MultiModelForm):
form_classes = {
'user':UserCreationForm,
'profile':EmployeeForm,
}
views.py
from django.views.generic import CreateView
from django.shortcuts import redirect
from .models import *
from .forms import *
class addEmployee(CreateView):
form_class = addEmployeeMultiForm
template_name = "addEmployee.html"
success_url = '/your url after user created'
def form_valid(self, form):
user = form['user'].save()
profile = form['profile'].save(commit=False)
profile.userName = User.objects.get(username= user.username)
profile.save()
return redirect(self.success_url)
urls.py
from .views import *
urlpatterns = [
url(r'^addemp/$', addEmployee.as_view(), name='addemp'),
]
addEmployee.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="." method="post">
{% csrf_token %}
{{ form }}
<button type="submit">Add</button>
</form>
</body>
</html>
あなたは人の従業員は、従業員がすべき、Userクラスを拡張したい場合は、 "ユーザー" およびないmodels.Modelを拡張します。したがって、Employeはdepartementフィールドを持つユーザーです。 –
それは本当ですか? Djangoのドキュメント(https://docs.djangoproject.com/en/dev/topics/auth/customizing/#extending-the-existing-user-model)からそのコードを直接入手しました – manchakowski
あなたの質問を読んで(つまり、ユーザーを作成してくださいオブジェクトと従業員オブジェクトを同時に)、私はEmployeeがUserを拡張したかったと思っています。それは、Employeeをインスタンス化するだけで継承されるため、UserでもあるEmployeeを作成することは可能です。しかし、フレームワークがあなたにそれを行う一つの方法を示しているならば、是非、 "djangoのやり方" –