Python 如何在Django Allauth表单上重写.signup()
我试图在继承自django allauth的Python 如何在Django Allauth表单上重写.signup(),python,django,forms,registration,django-allauth,Python,Django,Forms,Registration,Django Allauth,我试图在继承自django allauth的SignupForm的表单上重写.signup(),但它似乎不起作用。我的主要目标是在保存User模型的同时保存UserProfile模型的一个实例 以下是我目前掌握的代码: class MySignupForm(SignupForm): """ This form only used for django-allauth package (called in Settings.py) """ first_name = forms.Ch
SignupForm
的表单上重写.signup()
,但它似乎不起作用。我的主要目标是在保存User
模型的同时保存UserProfile
模型的一个实例
以下是我目前掌握的代码:
class MySignupForm(SignupForm):
""" This form only used for django-allauth package (called in Settings.py) """
first_name = forms.CharField(max_length=30, widget=forms.TextInput(attrs={'placeholder': 'First name'}))
last_name = forms.CharField(max_length=30, widget=forms.TextInput(attrs={'placeholder': 'Last name'}))
dob = forms.CharField(widget=forms.TextInput(attrs={'type': 'date', 'min': '1940-01-01', 'max': '2030-01-01'})) # HTML5 Widget... works?
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
login_url = reverse_lazy('account_login')
self.helper = FormHelper()
self.helper.layout = Layout(
Div('first_name', css_class='col-md-6'),
Div('last_name', css_class='col-md-6'),
Div('dob', css_class='col-md-12', style='clear: both'),
Div('username', css_class='col-md-12', style='clear: both'),
Div('email', css_class='col-md-12'),
Div('password1', css_class='col-md-12', style='clear: both'),
Div('password2', css_class='col-md-12'),
HTML('<div class="col-md-12"><br></div>'),
FormActions(
Submit('submit', 'Register', css_class='btn btn-primary', style='display:block;clear:both;margin: 0 0 15px 15px;float:left'),
HTML('<a href="{0}" class="btn btn-default" style="margin: 0 15px 15px 0;float:right;display:inline">Sign In</a>'.format(login_url))
)
)
def signup(self, request, user):
print(form.cleaned_data['dob'])
return user
类MySignupForm(SignupForm):
“”“此表单仅用于django allauth包(在Settings.py中调用)”
first_name=forms.CharField(最大长度=30,小部件=forms.TextInput(attrs={'placeholder':'first name'}))
last_name=forms.CharField(max_length=30,widget=forms.TextInput(attrs={'placeholder':'last name'}))
dob=forms.CharField(widget=forms.TextInput(attrs={'type':'date','min':'1940-01-01','max':'2030-01-01'}))#HTML5小部件。。。作品
定义初始化(self,*args,**kwargs):
super()
login\u url=reverse\u lazy('account\u login')
self.helper=FormHelper()
self.helper.layout=布局(
Div('first_name',css_class='col-md-6'),
Div('last_name',css_class='col-md-6'),
Div('dob',css_class='col-md-12',style='clear:tware'),
Div('username',css_class='col-md-12',style='clear:both'),
分区(“电子邮件”,css_class='col-md-12'),
Div('password1',css_class='col-md-12',style='clear:both'),
Div('password2',css_class='col-md-12'),
HTML(“
”),
形态(
提交('Submit','Register',css_class='btn btn primary',style='display:block;clear:both;margin:0 0 15px 15px;float:left'),
HTML(“”.format(登录地址))
)
)
def注册(自我、请求、用户):
打印(表单数据['dob'])
返回用户
正如您所看到的,我正在尝试
print()
dob,但是当我尝试注册时,我的终端中没有显示任何内容!任何帮助都将不胜感激。您需要在设置中使用此选项。py
ACCOUNT_SIGNUP_FORM_CLASS = 'yourproject.yourapp.forms.SignupForm'
编辑:
您可以使用post_save信号创建userprofile实例
from django.db.models.signals import post_save
@receiver(post_save, sender=User, weak=False, dispatch_uid='models.create_userprofile')
def create_userprofile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
您需要在settings.py中使用此选项
ACCOUNT_SIGNUP_FORM_CLASS = 'yourproject.yourapp.forms.SignupForm'
编辑:
您可以使用post_save信号创建userprofile实例
from django.db.models.signals import post_save
@receiver(post_save, sender=User, weak=False, dispatch_uid='models.create_userprofile')
def create_userprofile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
实际上我已经这样做了-自定义字段显示在我的注册表中,但是
print()
语句没有打印,这意味着它没有在注册时执行。@我不确定您是否已经尝试过,但您可以收听post\u save信号。请参见上面的我的编辑还有pre\u social\u login
signal.->从allauth.socialaccount.signals导入pre_social_login
这种方法的问题是我将失去对dob
字段的访问权,我需要将该字段保存在UserProfile
模型中,而不是User
model我实际上已经这样做了-我的注册表中显示了自定义字段,但是print()
语句未打印,这意味着注册时未执行该语句。@我不确定您是否已经尝试过,但您可以收听post_保存信号。请参见上面的我的编辑还有pre\u social\u login
signal.->从allauth.socialaccount.signals导入pre_social_login
此方法的问题是我将失去对dob
字段的访问权限,我需要将其保存在UserProfile
模型中,而不是User
模型中