对于使用.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
),如何覆盖类似-
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)
答案 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)