2013-12-09 3 views
1

Я создал модель UserProfile, и я хочу подключить ее к модели User django. В моем случае я хочу одновременно обновлять информацию о пользователе и информацию о пользователе. Моя 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 

я могу обновить всю информацию, которая принадлежит пользователю, а не к UserProfile. Однако, если я изменю

model = User 

к model = UserProfile и form_class = UserForm к form_class = UserProfileForm я могу обновить улицу, но не First_name, last_name или по электронной почте. Поэтому мне нужна связь между этими моделями и формами. Я попытался это:

model = User, UserProfile 
form_class = UserForm, UserProfileForm 

, но затем я получаю эту ошибку:

'tuple' object has no attribute '_default_manager'

Пожалуйста, помогите!

+0

Обратите внимание, что отдельный пользовательский файл больше не рекомендуется с 1,5, так как теперь вы можете определить пользовательский подкласс, который включает все ваши поля. –

+0

Здравствуйте, спасибо вам за помощь. Я попробую. – user3083117

ответ

0

Эта ошибка возникает из-за того, что вы используете общий вид обновления . Этот класс ожидает единственную модель и форму. В качестве решения вы можете переопределить методы 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

Смежные вопросы