Форма Django выдает ошибку: «принимает ровно 1 аргумент (задано 0)» - PullRequest
0 голосов
/ 24 июня 2010

Я работаю над базовой формой события, созданной из модели, но продолжаю получать следующее сообщение об ошибке:

TypeError at /addlaundry/
addlaundry() takes exactly 1 argument (0 given)

Я думаю, это потому, что я не передаю аргумент в представлениях,но я не могу найти нигде документированного, как это сделать правильно, по крайней мере, написано не так, как я понимаю.

Вот мои urls.py:

urlpatterns = patterns('',
    url('^addlaundry/$', 'beacon.laundry.views.addlaundry'),
}

И сами представления:

# Create your views here.

from schedule.views import EventForm

def addlaundry(request):
    if request.method == 'POST':
        form = EventForm(request.POST)
        if form.is_valid():
            return HttpResponseRedirect('/thanks/') #redirect after succesfully adding new delivery
    else:
     form = addlaundry()

    return render_to_response('newlaundry.html', {
        'form': form,
    })

Действительно ли мои взгляды неправильно структурированы, или я что-то упускаю?Если есть документация, о которой мне нужно прочитать, я хочу, чтобы я просто не нашел ее, но чувствую, что мне не хватает чего-то простого.

Спасибо,

Майкл

Ответы [ 6 ]

3 голосов
/ 24 июня 2010

Проблема здесь:

form = addlaundry()

Вы вызываете функцию просмотра addlaundry, которая принимает 1 обязательный аргумент (request), но вы не передаете ей никаких аргументов.

Конечно, во всяком случае, это неправильный способ создания формы.Вы захотите взглянуть на примеры, приведенные в документации по формам Django , чтобы узнать, как создавать и использовать формы в Django.

1 голос
/ 25 июня 2010

Кроме того, в urls.py ваше представление не должно быть строкой.

1 голос
/ 24 июня 2010

views.py:

from schedule.forms import EventForm

def addlaundry(request):
    if request.method == 'POST':
        form = EventForm(request.POST)
        if form.is_valid():
            return HttpResponseRedirect('/thanks/')
    else:
        form = EventForm()

    return render_to_response('newlaundry.html', {
        'form': form,
    })

Это означает:

  • с использованием файла forms.py для определения форм
  • инициализация вашей формы в не-пост-контекстном режиме (обычная загрузка первой страницы), которая будет передана вашему шаблону
1 голос
/ 24 июня 2010

Это ваша проблема:

 form = addlaundry()

Это пытается вызвать само представление! Это не то, что вы хотите. Вам нужно определить класс формы и вызвать его (создать) здесь.

1 голос
/ 24 июня 2010

Ваше представление называется addlaundry, и оно вызывает (предположительно) что-то еще, называемое addlaundry. Переименуйте один из них или используйте другой addlaundry из его пространства имен.

0 голосов
/ 24 июня 2010
else:
 form = addlaundry()

Так же, как и в исключении: функция представления нуждается в 1 аргументе, но вы не предоставили никакого.

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