2013-12-03 2 views
7

Я использую Джанго вид обновления для моего model/records редактирования материала, как показано нижекак изменить/изменить почтовые данные в Джанго UpdateView

class EditProductView(LoginRequiredMixin, UpdateView): 
    model = Product 
    def get_template_names(self): 

     return ['website/product/edit_product.html'] 

    def get_success_url(self): 

     return reverse('product_details', args=[self.kwargs['pk']]) 

    def get_context_data(self, **kwargs): 
     publisher = Publisher.objects.get(product__id=self.kwargs['pk']) 
     context = super(EditProductView, self).get_context_data(**kwargs) 
     context.update(
      { 
      'publisher':publisher, 
      } 
     ) 
     return context   

edit_product = EditProductView.as_view() 

Так что все, что я хочу/пытаюсь сделать, это изменить (добавить некоторые данные, редактировать уже отправленные данные в соответствии с функциональными возможностями сайта) данные POST перед отправкой в ​​форме,

Так я знаю, что UpdateView имеет некоторый метод защиту def post(self, request, *args, **kwargs):, но я не знаю точно, как использовать его

Supp новления ниже является request.POST данных я получаю

<QueryDict: {u'product_name': [u'Biscuit'], u'product_price': [u'1000'], u'product_tag': [u'']}> 

Так что теперь я хочу, чтобы изменить выше QueryDict и если значение product_tag было пусто, мне нужно назначить какое-то по умолчанию один и представить с последним querdict

Также я знаю, что Querydict изменен, но из-за того, что мне нужно отредактировать данные POST, до submitting/saving to database, мне нужно сделать этот запросdict как dict, а затем отредактировать его и преобразовать обратно в querdict

Так ведь whats my вопрос:

  1. Как мы можем изменить POST данные в UpdateView перед отправкой/сохранение в базе данных
  2. ли post метод heplful?

ответ

7

QueryDict изменен после создания его .copy(). См. docs.

Update Пример:

class SomeUpdateView(UpdateView): 

    def post(self, request, **kwargs): 
     request.POST = request.POST.copy() 
     request.POST['some_key'] = 'some_value' 
     return super(SomeUpdateView, self).post(request, **kwargs) 

Here гораздо шире обсуждение этой темы.

Кроме того, не следует ли это делать в подклассе ModelForm? Вы, конечно же, знаете, что можете настроить пользовательскую форму как form_class в UpdateView. Такая логика, как правило, требует модульных тестов, и гораздо проще объединить тестовую логику, которая находится в форме.

+0

На самом деле, я просто хочу, не хочу использовать ModelForm, поскольку уже сталкиваюсь с некоторыми проблемами с ModelForms в моем случае. Итак, наконец, мы можем редактировать данные сообщения в UpdateView выше? –

+0

Да, вы можете. См. Мое обновление для примера. –

+0

k это было полезно, но что делать, если мне нужно заменить request.POST на весь новый запрос? Есть ли способ заменить request.POST на весь новый запрос? как запрос.POST = new_querdict –

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