2011-02-26 14 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)) 

Oturum açmış bir kullanıcı başka bir kullanıcı ile eşleştirmek istiyor. Bir açılır menüden bir form gösterilir. Kendileri seçtiyse, bir doğrulama hatası oluşturun.Erişim örneği, ModelForm'a temiz (kendi) yönteminden geçirildi

Soru: PairForm'ın clean(self) yönteminde, DoubleForm'a verdiğim Pair'da ayarladığım kullanıcıya nasıl erişebilirim?

Bonus soru: if (first == second) yerine if (first is second) olmalıdır? Bir ModelForm yılında

cevap

29

, örnek self.instance

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

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

+0

Sağ üzerinden erişilebilir, bunu başlangıçta çalıştı ve bir DoesNotExist hata var. – epalm

+1

Oops, 'self.instance.first', dev sunucusunu yeniden başlattıktan sonra çalışıyor gibi görünüyor. Teşekkürler! – epalm

+0

Neden bir "DoesNotExist" aldığına dair hiçbir fikrim yok: Bu en çok merak edilen bölüm - tüm izinizi bu hataya göndermelisiniz. –

İlgili konular