Как я могу получить доступ к данным в поле формы Django из представления? - PullRequest
3 голосов
/ 24 июня 2009

У меня есть простая форма Джанго:

class testForm(forms.Form):
  list = forms.CharField()

  def getItems(self):
    #How do I do this?  Access the data stored in list.
    return self.list.split(",") #This doesn't work

Поле формы списка хранит значение данных CSV. Из внешнего экземпляра testForm в представлении я хочу иметь возможность просматривать список значений .csv, хранящийся в поле формы.

Ответы [ 4 ]

2 голосов
/ 25 июня 2009

Как уже упоминалось, вам нужно использовать атрибут словаря cleaned_data формы и метод is_valid. Таким образом, вы можете сделать что-то вроде этого:

def getItems(self):
    if not self.is_valid():
        return []    # assuming you want to return an empty list here
    return self.cleaned_data['list'].split(',')

Причина, по которой ваш метод не работает, состоит в том, что поля формы не являются типичными переменными вашего экземпляра. Надеюсь, это поможет!

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

То, что вы обычно делаете в django для получения данных формы, будет примерно таким:

form = testForm(request.POST)
if form.is_valid:
    # form will now have the data in form.cleaned_data
    ...
else:
    # Handle validation error
    ...

Если вы хотите самостоятельно выполнить какое-либо форматирование или проверку данных, вы можете указать это в методе проверки в форме. Либо для всей формы, либо для поля формы. Это также отличный способ сделать ваш код более СУХИМ.

0 голосов
/ 24 июня 2009

Вызовите is_valid в форме, затем получите доступ к словарю cleaned_data.

0 голосов
/ 24 июня 2009

Есть несколько вещей, которые вы должны знать здесь.

Во-первых, обычно в методе класса Python доступ к атрибутам осуществляется через объект self. Так что в теории ваша функция должна быть:

def get_items(self):
    return self.list.split(",")

Однако, в случае формы Django, это не сработает. Это связано с тем, что поле не имеет собственного значения - это значение прикрепляется к полю только при его отображении и получается по-разному в зависимости от того, было ли значение применено через исходные данные или путем передачи в словарь данных .

Если вы проверили форму (через form.is_valid()), вы можете получить форму через словарь cleaned_data:

    return self.cleaned_data['list']

Однако это не удастся, если list не прошел проверку по какой-либо причине.

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