Если вы хотите создать экземпляр трудоустроить во время или создания пользователя вы можете использовать Джанго сигналы, которые будут создавать экземпляр автоматически при создании нового пользователя.
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 является Пользователем с отделением. –
Это правда? Я получил этот код непосредственно из документации Django по адресу https://docs.djangoproject.com/en/dev/topics/auth/customizing/#extending-the-existing-user-model – manchakowski
Чтение вашего вопроса (т. Е. Создание пользователя объект и объект сотрудника одновременно), я хочу, чтобы вы хотели, чтобы Employee расширил пользователя. Можно создать Employee, который также является Пользователем, поскольку он наследует его, вы просто создаете экземпляр Employee. Но, если структура показывает вам один из способов сделать это, непременно следуйте «пути джанго», –