首页 > 解决方案 > 如何自动将用户模型组合到自定义用户模型

问题描述

我有这个自定义用户模型

class Customer(models.Model):
    user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
    name = models.CharField(max_length=200, null=True)
    email = models.EmailField(max_length=200)

    def __str__(self):
        return self.name

我使用 allauth 包进行身份验证,一旦我注册了一个新用户,我在网站的主页上收到了这个错误: RelatedObjectDoesNotExist at / User has no customer。

有没有办法在创建用户后自动将用户与客户结合起来?

标签: djangodjango-modelsdjango-forms

解决方案


我想到了

首先导入 post_save 和接收器

from django.db.models.signals import post_save
from django.dispatch import receiver

然后

class Customer(models.Model):
    user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
    name = models.CharField(max_length=200, null=True)
    email = models.EmailField(max_length=200)

    def __str__(self):
        return "%s's profile" % self.user


@receiver(post_save, sender=User)
def create_user_customer(sender, instance, created, **kwargs):
    if created:
        cuatomer, created = Customer.objects.get_or_create(user=instance)


post_save.connect(create_user_customer, sender=User)

在 settings.py

AUTH_USER_MODULE = 'YOURAPP.Customer'

推荐阅读