django-使用get_user_model创建用户时

时间:2018-09-05 09:24:29

标签: python django

对于使用.save()的模型,如何覆盖get_user_model方法?

forms.py

from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm
from django import forms

class UserCreateForm(UserCreationForm):
    class Meta:
        fields = ("first_name", "last_name", "username", "email", "password1", "password2")
        model = get_user_model()

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields["username"].label = "Username"
        self.fields["email"].label = "Email address"

在创建用户时,我想将用户数据发送到另一个模型中。由于它没有书面模型(相反,我将其导入为from django.contrib.auth import get_user_model),如何覆盖类似-

的save方法?
def save(self, *args, **kwargs):
        super(Model, self).save()
        Record.objects.create(
        employee_ID = self.employee_ID,
        first_name = self.first_name,
        last_name = self.last_name)

我的记录模型在哪里-

class Record(models.Model):

    first_name = models.CharField(max_length = 50)
    last_name = models.CharField(max_length = 50)
    employee_ID = models.CharField(max_length = 20)

2 个答案:

答案 0 :(得分:0)

您可以尝试在django中使用AbstractUser

from django.contrib.auth.models import AbstractUser

并在您的settings.py

中添加一行
AUTH_USER_MODEL = "myapp.NewUser"

继承的django用户并添加覆盖保存方法

class NewUser(AbstractUser):
    # your code
    def save(self, *args, **kwargs):
        super(Model, self).save()
        Record.objects.create(
        employee_ID = self.employee_ID,
        first_name = self.first_name,
        last_name = self.last_name)

,这不是创建Record的正确方法,它将使您的代码更加复杂。请尝试在Django中使用signal

您可以使用User作为发件人,

from django.contrib.auth.models import User

有关用户的更多信息,请阅读document

答案 1 :(得分:0)

使用信号

from django.db.models.signals import post_save
from django.contrib.auth.models import User
import Record

def send_data(sender, instance, created, **kwargs):

    record = Record()
    record.employee_ID = instance.username
    record.first_name = instance.first_name
    ....


post_save.connect(receiver = send_data, sender= User)