Django возвращает ошибку 500 для неправильных форм - PullRequest
0 голосов
/ 14 октября 2011

Вероятно, это еще одна ошибка пользователя, но у меня странная проблема с этим.

Я занимаюсь разработкой платформы, и все работает нормально, если вы с ней не связываетесь.Сейчас я тестирую с DEBUG = False и неправильным поведением пользователя, таким как отправка неполных форм (оставляя обязательные поля пустыми).

Дело в том, что django (1.3.1) должен автоматически возвращать список ошибок формы, еслипользователь отправляет неверную форму, но вместо этого возвращает 500 ошибок для каждой формы в приложении.

Я думаю, что мой код в порядке, но я не уверен.

views.py

@permission_required('spaces.add_space')
def create_space(request):

    """
    Returns a SpaceForm form to fill with data to create a new space. There
    is an attached EntityFormset to save the entities related to the space. Only
    site administrators are allowed to create spaces.

    :attributes: - space_form: empty SpaceForm instance
                 - entity_forms: empty EntityFormSet
    :rtype: Space object, multiple entity objects.
    :context: form, entityformset
    """
    space_form = SpaceForm(request.POST or None, request.FILES or None)
    entity_forms = EntityFormSet(request.POST or None, request.FILES or None,
                                 queryset=Entity.objects.none())

    if request.user.is_staff:    
        if request.method == 'POST':
            space_form_uncommited = space_form.save(commit=False)
            space_form_uncommited.author = request.user

            if space_form.is_valid() and entity_forms.is_valid():
                new_space = space_form_uncommited.save()
                space = get_object_or_404(Space, name=space_form_uncommited.name)

                ef_uncommited = entity_forms.save(commit=False)
                for ef in ef_uncommited:
                    ef.space = space
                    ef.save()
                # We add the created spaces to the user allowed spaces

                request.user.profile.spaces.add(space)
                #messages.success(request, _('Space %s created successfully.') % space.name)
                return redirect('/spaces/' + space.url)

        return render_to_response('spaces/space_add.html',
                              {'form': space_form,
                               'entityformset': entity_forms},
                              context_instance=RequestContext(request))
    else:
        return render_to_response('not_allowed.html',
                                  context_instance=RequestContext(request))

Шаблон слишком большой для вставки, вы можете увидеть его в dpaste

Я не понимаю, почему django возвращает ошибку 500 вместо отображениясписок ошибок.Кто-нибудь может мне помочь?

Полный исходный код (в конце концов, это GPL) находится на GitHub .Это модули на src/e_cidadania/apps/spaces

Ответы [ 3 ]

1 голос
/ 14 октября 2011

Я думаю, что вы должны вызвать is_valid в форме перед сохранением.

0 голосов
/ 14 октября 2011

Попробуйте просмотреть журнал HTTP-сервера, чтобы увидеть, что это за ошибка. Это может помочь сузить проблему. Если вы используете Apache, журнал по умолчанию имеет вид /var/log/apache/-error.log.

При возникновении непредвиденных / необъяснимых 500 ошибок часто можно найти более подробную информацию в журнале ошибок веб-сервера.

0 голосов
/ 14 октября 2011
ef_uncommited = entity_forms.save(commit=False)
            for ef in ef_uncommited:
                ef.space = space
                ef.save()

В строке, где написано: ef.space = space.К чему относится пространство?Вы не определили имя «пробел», поэтому я не уверен, что для ef.space задано, является ли оно строкой «пробел» или переменной.

...