2011-05-05 31 views
5

मैं Django 1.3 में UpdateView का उपयोग करके एक फॉर्म सहेजने का प्रयास कर रहा हूं और एक समस्या में भाग गया था। जब मैं फॉर्म को सहेज रहा हूं, तो यह वर्तमान यूआरएल के लिए पोस्ट है और सफलता यूआरएल एक ही यूआरएल है।क्लास आधारित दृश्य अद्यतन दृश्य को विस्तारित नहीं कर रहा है

फॉर्म को सहेजते समय, डेटा बदलना प्रतीत होता है क्योंकि पृष्ठ पर सभी फ़ील्ड अपडेट होते हैं, लेकिन जब मैं रीफ्रेश करता हूं, तो सबकुछ वापस आता है।

प्रपत्र एक मॉडल फार्म है और यहाँ मेरे विचार है:

class UserProfileView(UpdateView): 
    context_object_name = 'profile' 

    def get_template_names(self): 
     return ['webapp/user_profile.html'] 

    def get_queryset(self): 
     pk = self.kwargs.get('pk', None) 

     if pk is not None: 
      user = User.objects.get(pk=pk) 
     else: 
      raise AttributeError(u"Could not locate user with pk %s" 
          % pk) 

     if user.contributor_profile.all(): 
      queryset = Contributor.objects.filter(user__pk=pk) 
     else: 
      queryset = Member.objects.filter(user__pk=pk) 

     return queryset 

    def get_object(self, queryset=None): 
     if queryset is None: 
      queryset = self.get_queryset() 

     return queryset.get() 

मैं देख रहा हूँ क्या गलत हो रहा हो सकता है, यह देखकर रूप Django UpdateView वर्ग के माध्यम से फार्म की बचत होती है और Mixin के यह फैली हुई नहीं है। क्या कोई इस समस्या में पहले भाग गया है?

उत्तर

9

समाधान का पता लगाया। समस्या हो रही थी क्योंकि उस फॉर्म में कोई त्रुटि हुई थी जिसकी रिपोर्ट नहीं की जा रही थी। यह छिपे हुए फ़ील्ड के साथ प्रतीत होता है जिसे फ़ॉर्म को मान्य होने के लिए किसी भी तरीके से सेट करने की आवश्यकता होती है।

समाधान बहुत आसान है। आपको बस किसी भी छिपे हुए फ़ील्ड के लिए पोस्ट फ़ंक्शन और खाता ओवरराइड करने की आवश्यकता है:

def post(self, request, *args, **kwargs): 
    pk = self.kwargs.get('pk', None) 

    if pk is not None: 
     user = User.objects.get(pk=pk) 
    else: 
     raise AttributeError(u"Could not locate user with pk %s" 
          % pk) 

    if user.contributor_profile.all(): 
     contributor = Contributor.objects.get(user=user) 
     form = ContributorForm(request.POST, instance=contributor) 
    else: 
     member = Member.objects.get(user=user) 
     form = MemberForm(request.POST, instance=member) 

    if form.is_valid(): 
     self.object = form.save() 
     return HttpResponseRedirect(self.get_success_url()) 
    else: 
     return self.render_to_response(self.get_context_data(form=form))