簡體   English   中英

擴展Django用戶模型后創建新用戶

[英]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信號,該信號將在創建新用戶時自動創建實例。

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)

創建新用戶時,這將自動創建一個雇員實例(可以在其后添加空白實例數據)。

如果您希望擴展用戶模型並希望在創建用戶時添加更多信息,則可以使用django-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)

表格

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>

employee對象不會自動創建。 要同時創建一個user對象和一個employee對象,可以這樣使用user實例

employee = Employee(user=user, depatment='xyz')
employee.save()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM