2013-03-27 2 views
0

아래 코드가 있습니다. OfferAdmin에 'send_offer'동작이 있습니다.Django 관리자 작업이 작동합니다.

기본적으로 작업은 사용자가 완료되면 사용자에게 전자 메일이 전송되는 양식을 표시합니다.

그러나 아래 코드는 저에게 적합하지 않습니다. 제안 옆에있는 확인란을 클릭하고 장고 관리자의 드롭 다운 메뉴에서 "제안 이메일 보내기"를 선택하면 양식이 표시되지만 사용자에게 보내는 이메일은 전송되지 않습니다.

기본적으로 request.method == 'POST'행 아래의 코드 부분이 작동하지 않습니다.

어떻게해야합니까?

class OfferAdmin: 
... 

    class OfferForm(forms.Form): 
     title = forms.CharField(max_length=100) 
     image_link = forms.CharField(max_length=100) 
     list_price = forms.FloatField() 
     discount_price = forms.FloatField() 
     exclusive_price = forms.FloatField() 
     comments = forms.CharField(widget=forms.widgets.Textarea()) 

    def send_offer(self, request, queryset): 
     form = None 

     if request.method == 'POST': 
      form = self.OfferForm(request.POST) 

      if form.is_valid(): 

       for bid in queryset: 
        title = form.cleaned_data['title'] 
        image_link = form.cleaned_data['image_link'] 
        list_price = form.cleaned_data['list_price'] 
        discount_price = form.cleaned_data['discount_price'] 
        exclusive_price = form.cleaned_data['exclusive_price'] 
        comments = form.cleaned_data['comments'] 

        form_params = { 
         'title': title, 
         'image_link': image_link, 
         'list_price': list_price, 
         'discount_price': discount_price, 
         'exclusive_price': exclusive_price, 
         'comments': comments 
        } 

        params = { 
         'obj': bid, 
         'form': form_params 
        } 

        rts = render_to_string 
        subject = rts(
         'shopper/email/email-offer-subject.txt', params) 
        text = rts('shopper/email/email-offer.txt', params) 
        html = rts('shopper/email/email-offer.html', params) 
        bid.user.send_email(subject, text, html) 

        self.message_user(request, "Successfully sent email") 

        return HttpResponseRedirect(request.get_full_path()) 

     if not form: 
      for obj in queryset: 
       data = { 
        'title': obj.product.title, 
        'image_link': obj.image_link, 
        'list_price': obj.list_price, 
        'discount_price': obj.discount_price, 
        'exclusive_price': obj.exclusive_price, 
       } 
      form = self.OfferForm(data) 

    return render_to_response(
     "shopper/admin/offer_form.html", { 
      'bids': queryset, 'offer_form': form}, 
     context_instance=RequestContext(request)) 

send_offer.short_description = "Send offer email" 
+0

return HttpResponseRedirect (request.get_full_path())는 for 루프 외부에 있어야합니다. 'form_params'를 루프 밖에서 초기화하는 것이 더 좋을 것입니다. 왜냐하면 값이 쿼리 세트와 독립적이기 때문입니다. – pankaj28843

답변

0

양식 제출을 처리 할 intermediate page이 필요합니다.

양식이 제출 될 때 요청이 변경 목록보기에 의해 처리되고 이 아닌 send_offer 기능이 처리됩니다.

EDIT : 또한 관리자 조치는 항상 POST 요청을받습니다.