2015-08-26 1 views
1

Я столкнулся с очень странной проблемой, когда одна форма инициализируется данными из другой формы целиком. Вот первый вид:Django текстовое поле формы с заполнением данными из другой формы

class UpdateProfileView(FormMixin, DetailView): 
    form_class = UpdateProfileForm 
    model = Profile 
    template_name = 'profile/update.html' 

    def get_context_data(self, **kwargs): 
     self.object = self.get_object() 
     context = super(UpdateProfileView, self).get_context_data(**kwargs) 
     ... 
     self.initial['description'] = profile.about 

     context['form'] = self.get_form() 
     return context 
    ... 

Это форма, которая вернет правильные данные. Как только он будет загружен, однако, следующая форма будет возвращать инициализированные данные из предыдущей, даже из разных сессий, браузеров и мест:

class BountyUpdateForm(forms.ModelForm): 

    class Meta: 
     model = Bounty 
     fields = ("description", "banner") 


class UpdateBountyView(UpdateView): 
    form_class = BountyUpdateForm 
    model = Bounty 
    template_name = 'bounty/update.html' 
    ... 

    def get_context_data(self, **kwargs): 
     context = super(UpdateBountyView, self).get_context_data(**kwargs) 
     description = context['form']['description'] 
     value = description.value() 
     # Value equals what was initialized by the previous form. 

мне действительно любопытно, почему эти две форм взаимодействия в этом случае. Оба поля формы называются «описанием», но это не объясняет, почему исходные данные из одного будут пересекаться с другим. Перезапуск сервера, кажется, временно получает вторую форму, чтобы показывать правильные значения, но как только первый загружается, второй следует примеру.

Любая помощь была бы принята с благодарностью!

+0

Считается, что я могу инициализировать поля формы неправильно, но было напомнено, что это документированный способ сделать это: https://docs.djangoproject.com/en/1.8/ref/forms/api/#dynamic-initial -значения – Maaack

+0

Вы имеете в виду, даже после метода POST для представления, 'description' не обновляется? –

+0

Нет, извините, если это было непонятно. Я имею в виду только загрузку 2-й формы, я получаю исходные данные из 1-й формы, хотя это отдельные страницы, посвященные различным моделям. – Maaack

ответ

0

После некоторого поиска я смог определить, что мой второй вид имел self.initial, установленный с теми же значениями, что и первая форма, на время отправки. Я не мог определить, почему, но нашел эти вопросы, связанные с:

же проблема, но не принято отвечать: Django(trunk) and class based generic views: one form's initial data appearing in another one's

Различные проблемы, но хороший ответ: Setting initial formfield value from context data in Django class based view

Мой обходной путь был перекрывая get_initial () в моей первой форме, вместо того, чтобы напрямую устанавливать self.initial ['description'].

class UpdateProfileView(FormMixin, DetailView): 
    form_class = UpdateProfileForm 
    model = Profile 
    template_name = 'profile/update.html' 

    def get_initial(self): 
     return { 
      'description': self.object.about 
     } 

    def get_context_data(self, **kwargs): 
     ... 
     # Removed the following line # 
     # self.initial['description'] = profile.about 
     ... 
     context['form'] = self.get_form() 
     return context 

Надеюсь, что это поможет любому, кто сталкивается с этой проблемой. Хотелось бы, чтобы я знал больше о классах на основе Django, чтобы понять, почему это происходит. Однако я не смог определить, где был установлен self.initial, за пределами пустой dict в FormMixin().

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

  • Нет связанных вопросов^_^