如何在用户向Django注册时添加新的数据库条目?

2024-07-06 18:42:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我开始学习Django,在我的模型中有一个名为Customer的类

class Customer(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE,
        primary_key=True)
    cart = models.ManyToManyField(Product)
    orders = models.ManyToManyField(Order)

    def __init__(self, user):
        self.user = user

我正在导入django.contrib.auth以将用户注册到数据库,但我还希望在注册时初始化Customer对象

我第一次尝试从UserCreationForminitialize中重写save()方法Customer对象:

class UserCreationForm(forms.ModelForm):
    def save(self, commit=True):
        user = super(UserCreationForm, self).save(commit=False)
        user.set_password(self.cleaned_data["password1"])
        customer = Customer(user)
        customer.save()
        if commit:
            user.save()
        return user

但它似乎没有创建Customer对象

或者,扩展User类以具有Customer类字段更好吗?我最初认为应该将身份验证分开,这就是我创建Customer类的原因


Tags: 对象djangoselftruemodelssavedefcustomer
1条回答
网友
1楼 · 发布于 2024-07-06 18:42:13

如果您创建了一个信号,可能会更好

from django.db.models import signals
from django.dispatch import receiver
from django.contrib.auth.models import User
from path.to.models import Customer

@receiver(signals.post_save, sender = User)
def create_customer(sender, instance, created, *args, **kwargs):
    if created:
        c = Customer(...) #create your customer object
        c.save()

在apps.py中,导入信号以运行它

相关问题 更多 >