2016-04-05 49 views
0

我一直在試圖爲Allauth構建我自己的SignupForm,並不斷遇到問題。Allauth覆蓋SignupForm和UserProfile保存

當我試圖像這樣的forms.py:

class SocialSignupForm(forms.ModelForm): 
    class Meta: 
     model = Profile 
     exclude = ('user',) 

def __init__(self, *args, **kwargs): 
    self.sociallogin = kwargs.pop('sociallogin') 
    user = self.sociallogin.user 

username = forms.CharField(max_length=25, label="Username", help_text='', required=True) 

從外觀上看,沒有任何麻煩了裝載在所有形式。但是,當我嘗試提交表單時,我將得到USER_ID爲空錯誤。據推測,保存方法試圖在創建用戶之前保存配置文件。不知道如何改變這個順序,並重寫註冊()方法,因爲你只需要在初始保存後運行。

我已經嘗試了許多其他方法(覆蓋forms.Form和AllAuth的SocialSignUpForm),沒有任何更好的運氣(儘管是一組不同的錯誤)。

在這裏的任何輸入/指導將是驚人的,這一直讓我瘋狂。

回答

1

據我瞭解,在SocialSignupForm旨在爲您定製的User模型的形式,所以,除非Profile是你的用戶模型(即從AbstractBaseUser派生),你不能在這裏使用它。

如果您想自定義表單來添加個人資料信息,您應該在相反的方向執行此操作。在表單上定義的附加字段使用您的個人資料,但仍保持

class Meta: 
    model = User # or whatever your User model is 

事實上,你甚至不應該定義一個類元,而是從SignupForm得出:

from allauth.account.forms import SignupForm 
class MySignupForm(SignupForm): 
    ... 

然後,您可以覆蓋custom_signupsave功能,嘗試創建基於用戶模型的配置文件模型

或者查看使用信號執行此操作。

+0

好的,這完全改變了我對它的想法,並使一些感覺。我重構了表單以從allauth.socialaccount.forms.SignupForm繼承,它似乎正確地生成了一切。然而,我的註冊(自我,請求,用戶)似乎沒有做任何事情。沒有錯誤發生,但配置文件對象從來沒有真正保存(赫克我不明白,如果註冊甚至發射) – Programming123

+0

嘗試添加一個保存和custom_signup方法只是一個打印語句,看看他們是否被調用。 – dkarchmer

+0

保存肯定是射擊(因爲用戶名/電子郵件已保存),我試圖添加打印和郵件消息註冊,並沒有看到任何東西。我也會嘗試覆蓋custom_save。打印聲明在哪裏出現? – Programming123