使用 google allauth 身份验证注册时出现 Django 完整性错误

问题描述

我在尝试通过 google 身份验证注册新用户时遇到完整性错误。不过,我的普通用户注册表可以正常工作。

这是我的模型:

Class User (AbstractUser)
    objects = CustomUserManager()
    email = models.EmailField(unique=True,blank=False)
    username = models.CharField(max_length=100,unique=True,help_text='required.')
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)
    date_joined = models.DateField(default=timezone.Now)
    birthdate = models.DateField(default=timezone.Now)
    slug = models.SlugField(max_length=50,null=True,blank=True)
    gender = models.CharField(
        max_length=20,choices=GENDER_OPTIONS,blank=False,default='')
    country = CountryField(default='US')

    USERNAME_FIELD = 'email'
    required_FIELDS = ['username']

    def save(self,*args,**kwargs):
        if not self.slug:
            value = self.username
            self.slug = slugify(value,allow_unicode=True)
        super().save()
    

这是我的设置:

ACCOUNT_SIGNUP_FORM_CLASS = "core.forms.CustomUserCreationForm"
SOCIALACCOUNT_AUTO_SIGNUP = False
ACCOUNT_EMAIL_required=True
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {
    'google': {
         'ScopE':['profile','email',],'AUTH_ParaMS':{'access_type':'online',}
     }
}

表格:

class CustomUserCreationForm(UserCreationForm):
def __init__(self,**kwargs):
    super().__init__(*args,**kwargs)
    self.fields['username'].widget.attrs.update({'placeholder': 'Enter Username'})
    self.fields['email'].widget.attrs.update({'placeholder': 'Enter Email'})
    self.fields['password1'].widget.attrs.update({'placeholder': 'Enter password','label': ''})
    self.fields['password2'].widget.attrs.update({'placeholder': 'Repeat your password'})

class Meta(UserCreationForm):
    model = User
    fields = ('email','username','gender','country','password1','password2')

    help_texts = {
        'email': 'required','gender': 'optional','country': 'required'
    }

    labels = {
            'email': '','username': '','gender': '','password1': '','password2': '','country' :'Your location',}

def clean_username(self):
    username = self.cleaned_data['username']
    print(username)
    if ' ' in username:
        raise forms.ValidationError("Username may not contain spaces.")
    if '@' in username or '*' in username or '+' in username or '=' in username or '-' in username \
    or '^' in username or '$' in username or '!' in username or '%' in username:
        raise forms.ValidationError("Username may not contain special characters.")
    return username

def save(self,commit=True):
    user = super(UserCreationForm,self).save(commit=False)
    user.username = self.cleaned_data['username']
    user.email = self.cleaned_data['email']
    if commit:
        user.save()
    return user

当我使用常规表单(无 Google 身份验证)注册时,它工作正常,但是当我尝试使用 Google 身份验证注册用户时,我收到此错误

/accounts/social/signup/ 处的完整性错误 关系“core_user”的“date_joined”列中的空值违反了非空约束 详细信息:失败的行包含 (5,pbkdf2_sha256$216000$hwSDRIv3oMxk$xVIeN30XF/gGRw5CXcVajFAScRhPq9...,null,f,Yeager,test25@gmail.com,test25,test),US25 null .

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)