2014-02-08 2 views
3

Я бегу Django 1.6.xDjango: Как установить скрытое поле на общем представлении создания?

Чтобы продлить пользователей я добавил еще одну модель хранения данных:

class UserProfile (models.Model): 
    user = models.ForeignKey(User)` 
    height = models.IntegerField(blank=True, null=True)` 

Теперь я палочка, чтобы добавить вид, который позволяет пользователю добавлять его собственной информации там. Началось с django.views.generic.edit.CreateView, но вы хотите также предоставить как минимум редактирование/обновление.

Так я добавил импорта и создали вид:

from django.views.generic.edit import CreateView, UpdateView 
# .... 
class UserProfileCreateView(CreateView): 
    model = UserProfile 
    fields = ['height'] 

Также я добавил запись внутри urls.py:

url(r'^userprofile/new/$', login_required(UserProfileCreateView.as_view()), name="add_userprofile") 

Но теперь я застрял на укажите, как правильно назначить идентификатор пользователя. Я хочу, чтобы это поле было задано в фоновом режиме. Любые намеки?

ответ

10

Вы можете сделать это таким образом:

  • ПОЛУЧИТЬ пользователя из объекта запроса.
  • перезаписать метод form_valid в вашем классе UserProfileCreateView,
  • Приложить пользователя, чтобы сформировать экземпляр и сохранить его.
class UserProfileCreateView(CreateView): 
    model = UserProfile 
    fields = ['height'] 

    def form_valid(self, form): 
     user = self.request.user 
     form.instance.user = user 
     return super(UserProfileCreateView, self).form_valid(form) 

Этот код для Python 2.7.x

+0

2 года спустя, по-прежнему большой ответ! – aspyct

1
class UserProfileCreateView(CreateView): 
    def form_valid(self, form): 
     self.object = form.save(commit=False) 
     self.object.user = self.request.user 
     self.object.save() 
     return super(ModelFormMixin, self).form_valid(form) 
+0

Не удалось ли сохранить объект, даже если он недействителен? – EWit

+0

этот метод вызывается после проверки в ProcessFormView, – vadimchin

+0

Ах, правильно. Я не слишком привык к представлениям, основанным на классе. Спасибо за разъяснения. – EWit