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)) 

Un usuario conectado quiere emparejarse con otro usuario. Se les muestra un formulario con un menú desplegable. Si se eligen a sí mismos, generan un error de validación.Instancia de acceso pasada a ModelForm desde el método de limpieza (auto)

Pregunta: en el método clean(self) de PairForm, ¿cómo puedo acceder al usuario que configuré en el par que di al PairForm?

Pregunta extra: ¿debería ser if (first is second) en lugar de if (first == second)?

Respuesta

29

En un ModelForm, la instancia es accesible a través de self.instance

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

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

+0

derecho, he intentado que en un principio, y ha dado un error DoesNotExist. – epalm

+1

Vaya, 'self.instance.first' parece funcionar después de reiniciar el servidor de desarrollo. ¡Gracias! – epalm

+0

No tengo idea de por qué obtendría un 'DoesNotExist': esa es la parte más curiosa: debe publicar toda su trazabilidad en ese error. –

Cuestiones relacionadas