2011-02-26 7 views
12
class Pair(models.Model): 
    first = models.ForeignKey(User, related_name='pair_first') 
    second = models.ForeignKey(User, related_name='pair_second') 

class PairForm(forms.ModelForm): 
    class Meta: 
     model = Pair 
     fields = ('second',) 

    def clean(self): 
     first = None # how can I get first? 
     second = self.cleaned_data.get("second") 

     if (first == second): 
      raise ValidationError("You can't pair with yourself, silly.") 

def pair_create(request): 
    if request.method == 'POST': 
     pair = Pair() 
     pair.first = request.user 
     form = PairForm(instance=pair, data=request.POST) 
     if form.is_valid(): 
      form.save(); 
      return HttpResponseRedirect(reverse('somewhere')) 
    else: 
     form = PairForm() 

    return render_to_response('something.html', { 
     'form': form, 
    }, context_instance=RequestContext(request)) 

एक लॉग-इन उपयोगकर्ता किसी अन्य उपयोगकर्ता के साथ जुड़ना चाहता है। उन्हें एक ड्रॉपडाउन के साथ एक रूप दिखाया गया है। अगर वे खुद को चुनते हैं, तो सत्यापन त्रुटि बढ़ाएं।स्वच्छ (स्वयं) विधि से मॉडलफॉर्म को पास किया गया एक्सेस उदाहरण

प्रश्न: PairForm की clean(self) विधि में, मैं उस जोड़े को कैसे एक्सेस कर सकता हूं जिसे मैंने जोड़े पर सेट किया था जिसे मैंने जोड़ा है?

बोनस प्रश्न: if (first == second) के बजाय if (first is second) होना चाहिए?

उत्तर

29

एक ModelForm में, उदाहरण के माध्यम से self.instance

self.instance.first == self.cleaned_data.get("second")

http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overriding-the-clean-method

+0

अधिकार पहुँचा जा सकता है, मुझे लगता है कि शुरू में करने की कोशिश की है, और एक DoesNotExist त्रुटि मिली। – epalm

+1

ओह, 'self.instance.first' dev सर्वर को पुनरारंभ करने के बाद काम करता प्रतीत होता है। धन्यवाद! – epalm

+0

मुझे नहीं पता कि आपको 'डॉन नॉटएक्सिस्ट' क्यों मिलेगा: यह सबसे उत्सुक हिस्सा है - आपको उस त्रुटि पर अपना पूरा ट्रेसबैक पोस्ट करना चाहिए। –

संबंधित मुद्दे