Доступ к двум возвращенным значениям в представлении Django - PullRequest
0 голосов
/ 23 апреля 2011

У меня есть форма clean, метод возвращает два значения.Как мне различить две переменные на мой взгляд.По сути, я хочу использовать данные формы для проверки базы данных и возврата объекта, если он существует, чтобы я мог передать его в новое представление.Моя цель - не попадать в базу данных дважды, один раз, чтобы увидеть, существует ли объект, и другой раз, чтобы извлечь его для отображения пользователю.

Forms.py

class DocumentCodeLookup(forms.Form):
    code = forms.CharField(max_length=15, error_messages={'required': 'Whoops! Please enter the Document Code from your ticket.'})

    def clean_code(self):
        code = self.cleaned_data['code'].upper()
        if (re.match(r'^[A-Z0-9]{4,8}[-][A-Z0-9]{6}$',code)):
            code_parts = code.split('-')

            try:
                q = Code.objects.get( user_defined_code__name=code_parts[0], document_code=code_parts[1] )
            except Code.DoesNotExist:
                raise forms.ValidationError("Hmmm, we couldn't find that document.")

            else:
                raise forms.ValidationError("Hmmm, we couldn't find that document.")
        return code, q

Views.py

def index(request):
    code_lookup_form = DocumentCodeLookup()

    if request.method == 'POST':
        code_lookup_form = DocumentCodeLookup(request.POST)
        if code_lookup_form.is_valid:
            redirect('document', x = q) # I want to pass the returned object to the view

    return render_to_response('base/splash_page.html' ,{
            'code_lookup_form'      :       code_lookup_form
    }, context_instance=RequestContext(request))

1 Ответ

1 голос
/ 23 апреля 2011

Будет ли clean_field работать так же?

http://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-a-specific-field-attribute

Обратите внимание на комментарий.

Вы можете указать attr в форме с помощью self.

class DocumentCodeLookup(forms.Form):
    code = forms.CharField(max_length=15, error_messages={'required': 'Whoops! Please enter the Document Code from your ticket.'})

    def clean_code(self):
        code = self.cleaned_data['code'].upper()
        if (re.match(r'^[A-Z0-9]{4,8}[-][A-Z0-9]{6}$',code)):
            code_parts = code.split('-')

            self.q = None
            try:
                self.q = Code.objects.get( user_defined_code__name=code_parts[0], document_code=code_parts[1] )
            except Code.DoesNotExist:
                raise forms.ValidationError("Hmmm, we couldn't find that document.")

            else:
                raise forms.ValidationError("Hmmm, we couldn't find that document.")
        return code

q находится на форме.

def index(request):
    code_lookup_form = DocumentCodeLookup()

    if request.method == 'POST':
        code_lookup_form = DocumentCodeLookup(request.POST)
        if code_lookup_form.is_valid():
            redirect('document', x = code_lookup_form.q) # <---

    return render_to_response('base/splash_page.html' ,{
            'code_lookup_form'      :       code_lookup_form
    }, context_instance=RequestContext(request))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...