[英]Django Unable to login after extending user model and creating the superuser
[英]Creating a new user after extending Django user model
坎特似乎找到了可以明确回答我问题的答案。
如果使用以下基本代码扩展Django用户模型:
class Employee(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
department = models.CharField(max_length=100)
这对创建新用户有何影响? 创建新用户时是否自动创建employee
类对象? 如果需要department
字段,如何同时创建用户对象和员工对象?
如果您希望在创建时间或用户创建时创建员工实例,则可以使用django信号,该信号将在创建新用户时自动创建实例。
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)
创建新用户时,这将自动创建一个雇员实例(可以在其后添加空白实例数据)。
如果您希望扩展用户模型并希望在创建用户时添加更多信息,则可以使用django-betterforms( http://django-betterforms.readthedocs.io/en/latest/multiform.html )
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)
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,
}
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)
from .views import *
urlpatterns = [
url(r'^addemp/$', addEmployee.as_view(), name='addemp'),
]
<!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>
employee
对象不会自动创建。 要同时创建一个user
对象和一个employee
对象,可以这样使用user
实例
employee = Employee(user=user, depatment='xyz')
employee.save()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.