2013-12-09 46 views
1

我創建了一個UserProfile模型,我想將它與django內置的User模型連接起來。在我的情況下,我想同時更新UserProfile信息和用戶信息。 我的用戶配置模式:Django - 爲同一視圖使用多個模型和表單

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    street = models.TextField(max_length=100, null=True) 

我的形式:

class UserForm(ModelForm): 
    class Meta: 
    model = User 
    fields = ['first_name', 'last_name', 'email'] 
    widgets = { 
     'first_name': TextInput(attrs={'required': True, 'size': 28}), 
     'last_name': TextInput(attrs={'required': True, 'size': 28}), 
     'email': EmailInput(attrs={'required': True, 'size': 28}), 
    } 

class UserProfileForm(ModelForm): 
    class Meta: 
    model = UserProfile 
    fields = ['street'] 
    widgets = { 
     'street': TextInput(attrs={'required': False, 'placeholder': ' Street'}), 
    } 

而我的觀點:

class UpdateUserAccountView(SuccessMessageMixin, UpdateView): 
    model = User 
    template_name = 'dashboard/update_user_account.html' 
    success_message = 'Profile successfully updated' 
    form_class = UserForm 
    success_url = '/dashboard/account' 

    def get_context_data(self, **kwargs): 
    context = super(UpdateUserAccountView, self).get_context_data(**kwargs) 
    context['title'] = 'Update Profile' 
    context['user'] = User.objects.all() 
    context['userprofile'] = UserProfile.objects.all() 
    return context 

我可以更新屬於用戶,不以用戶配置的所有信息。但是,如果我改變

model = User 

model = UserProfileform_class = UserFormform_class = UserProfileForm我可以更新街,但沒有名字,姓氏或電子郵件。 因此,我需要這些模型和表單之間的連接。 我嘗試這樣做:

model = User, UserProfile 
form_class = UserForm, UserProfileForm 

但後來我得到這個錯誤:

'tuple' object has no attribute '_default_manager'

請幫幫忙!

+0

請注意,從1.5開始不再推薦使用單獨的UserProfile,因爲您現在可以定義包含所有字段的自定義User子類。 –

+0

你好,謝謝你的幫助。我會嘗試。 – user3083117

回答

0

發生此錯誤是因爲您正在使用UpdateView通用視圖。這個類需要一個模型和表單。 作爲一種解決方案,您可以重寫UpdateView方法,以像使用get_context_data一樣考慮兩個模型。

+0

您能否給我一個代碼示例? – user3083117

+0

我現在可以使用兩種不同的形式。我用這個代碼:def get(self,request,* args,** kwargs): super(UpdateUserAccountView,self).get(request,* args,** kwargs) form1 = self.form_class form2 = self。 second_form_class return self.render_to_response(self.get_context_data( object = self.object,form1 = form1,form2 = form2))' 但是,我仍然無法使用多個模型。請幫忙! – user3083117

相關問題