Django

2011-06-21 7 views
13

में क्लास आधारित जेनेरिक विचारों के साथ समस्या मैं Djangos क्लास आधारित जेनेरिक विचारों का उपयोग कर एक सीआरयूडी आवेदन लिखने की कोशिश कर रहा हूं। निम्नलिखित कोड है जिसे मैंने डीबी में एक नया उपयोगकर्ता बनाने के लिए लिखा था।Django

from django.views.generic import CreateView 
    from django.contrib.auth.decorators import login_required 
    from django.contrib import messages 

    class UserCreateView(CreateView): 
    """ 
    Display and accept a new user to be created in db 
    """ 
    form_class = ProfileForm 
    template_name = 'userdb/profile_form.html' 
    success_url = '/organization/users/' 

    def post(self, request, *args, **kwargs): 
     messages.success(request, "Success", extra_tags='msg') 
     return super(UserCreateView, self).post(request, *args, **kwargs) 

    @method_decorator(login_required) 
    def dispatch(self, *args, **kwargs): 
     return super(UserCreateView, self).dispatch(*args, **kwargs) 

ध्यान दें कि उपयोगकर्ता को प्रदर्शित होने के लिए एक सफल संदेश जोड़ने के लिए मुझे पोस्ट फ़ंक्शन का विस्तार करना पड़ा है। मुझे पता है कि ऐसा करने का यह एक अच्छा तरीका नहीं है, जब इस समारोह को बुलाया जाता है तो यह तय नहीं होता है कि सबमिट किए गए फॉर्म में वैध डेटा है या नहीं। तो मेरा सवाल यह है कि क्या क्लास आधारित जेनेरिक विचारों के साथ डीजेंगोस मैसेजिंग फ्रेमवर्क को जोड़ने का कोई तरीका सुझाया गया है?

उत्तर

16

उत्तर इस बात पर निर्भर करता है कि आप विशेष रूप से मैसेजिंग फ्रेमवर्क के साथ क्या करना चाहते हैं। अगर इसे प्रत्येक get अनुरोध के लिए बुलाया जाना है तो आपको स्वाभाविक रूप से इसे get विधि में डालने की आवश्यकता होगी (बिंदु यह है कि इस कोड को रखने के लिए कोई सही जगह नहीं है)।

वैसे भी, ऐसा लगता है कि आप ऐसी जगह की तलाश में हैं जो फ़ॉर्म मान्य होने पर ही ट्रिगर हो।

CreateViewModelFormMixin का उपयोग करता है जो form_valid विधि लागू करता है जिसे केवल सफल फॉर्म बचत पर निकाल दिया जाता है। उत्तम!

def form_valid(self, form): 
    messages.success(self.request, "Success", extra_tags='msg') 
    return super(UserCreateView, self).form_valid(form) 
    # ModelFormMixin will now save 
    # FormMixin will now redirect to success_url() 
    # override above behavior if you need to do something with the object 
+0

मैंने पहले 'form_valid' फ़ंक्शन को लागू करने का प्रयास किया लेकिन यह काम नहीं किया क्योंकि मुझे अनुरोध ऑब्जेक्ट तक पहुंचने का कोई तरीका नहीं मिला। यह ठीक काम करता है बहुत बहुत धन्यवाद! – vimukthi

+0

एनपी! खुशी है कि यह मदद की –