Экземпляр доступа, переданный в ModelForm из метода clean (self) - PullRequest
14 голосов
/ 26 февраля 2011
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) как я могу получить доступ к пользователю, которого я установил для пары, которую я дал для PairForm?

Бонусный вопрос: должно ли это быть if (first is second) вместо if (first == second)?

1 Ответ

35 голосов
/ 26 февраля 2011

В ModelForm экземпляр доступен через self.instance

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...