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

登录的用户想要与另一个用户配对。它们以下拉列表形式显示。如果他们选择自己,提出验证错误。从clean(self)方法传递给ModelForm的访问实例

问题:在PairForm的clean(self)方法中,如何访问我在Pair上设置的用户,并将其添加到PairForm中?

奖励问题:应该是if (first is second)而不是if (first == 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 2011-02-26 20:16:23

+1

糟糕,'self.instance.first'似乎在重新启动dev服务器后工作。谢谢! – epalm 2011-02-26 20:36:24

+0

我不知道为什么你会得到一个'DoesNotExist':这是最奇怪的部分 - 你应该发布你的整个回溯的错误。 – 2011-02-26 20:37:01

相关问题