Как получить полевые данные из модели? - PullRequest
0 голосов
/ 07 апреля 2011

Скажем, у меня есть приложение Django с именем app. В нем у меня есть класс модели, определенный в models.py с именем data. Кроме того, у меня есть HTML-файл в каталоге шаблонов, который имеет несколько списков выбора, которые должны быть заполнены полями модели, такими как тип, дата. Что мне нужно сделать, так это получить списки полей в views.py и заполнить их списками выбора. Другое дело, что после того, как пользователь отправит свой запрос, выбрав значение в списке выбора, я покажу ему таблицу, отображающую значения всех полей в модели. Таким образом, в основном я должен извлечь то, что пользователь вводит, и запросить по входу, и получить данные всех полей в модели на основе запроса. Мы могли бы назвать еще два поля time, value. Эти вещи в основном должны быть сделаны в views.py.

Вот списки выбора в файле hmtl:

 <form action="" method="post">
 <select name="type" values="type_data"></select>
 <select name="date" values="date_data"></select>
 <input type="submit" value="Submit">
 </form>

То, что я попытался, для двух вещей:

1.Чтобы получить данные для заполнения списка выбора, я использовал:

objects= data.objects.all()
type_data=getattr(objects, 'type')
date_data=getattr(objects, 'date')

2.Для получения данных после запроса я использовал:

if request.method == 'POST':
     …
    mytype =  '% r' % request.POST.get['type']
   mydate = ' %r ' % request.POST.get['date']
   objects2= data.objects2.filter(type=mytype,date=mydate)
   time=getattr(objects2, 'time')
   value=getattr(objects2, 'value')

Это не работает. Я ссылаюсь на эту ссылку объект django get / set field , поэтому я в основном использую это для получения данных поля из модели: getattr(obj, 'field_name')

Есть мысли? Я ценю любую помощь

Ответы [ 2 ]

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

ваша objects переменная является QuerySet, когда материализованный является "списком объектов", поэтому, чтобы получить список свойств объекта, вы должны выполнить итерации по ним:

objects = data.objects.all()

type_data = []
date_date = []

for obj in objects:
    type_data.append(obj.type)
    date_date.append(obj.date)

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

for obj in objects:
    type_data.append((obj.pk, obj.type))
    date_date.append((obj.pk, obj.date))

это создаст список кортежей:

[(1, 'value1'), (2, 'value2')...]

, поэтому вШаблон, который вы можете использовать:

<select name="type">
    {% for value, name in type_data %}
        <option value="{{ value }}">{{ name }}</option>
    {% endfor %}
</select>

, но имейте в виду, что django может упростить этот процесс - читайте о формах.

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

Посмотрите на функциональность формы Джанго - в частности, ModelChoiceField - она ​​решает эту проблему.

Если вы хотите проанализировать модель, чтобы увидеть, какие поля у нее есть, посмотрите на model._meta.fields.

Например, следующий код распечатывает значение для каждого поля в экземпляре модели instance:

for field in instance._meta.fields:
    print field.attname, '=', getattr(model, field.attname)
...