假设我有一个名为app的Django应用程序,其中我有一个在models.py中定义的名为data的模型类。另外,我在模板目录中有一个html文件,它有几个选择列表,应该用模型的字段填充,比如类型、日期。我需要做的是在views.py中获取字段列表,并用它们填充拾取列表。另一件事是,在用户通过选择picklist中的值提交查询之后,我将向他们显示一个表,其中显示模型中所有字段的值。基本上我需要检索用户输入的内容,并根据输入进行查询,根据查询获得模型中所有字段的数据。我们可以命名另外两个字段time, value。这些事情应该主要在views.py中完成。
以下是html文件中的列表:
<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字段所以我基本上是用它来获取字段数据从模型:getattr(obj, 'field_name')
任何想法吗?感谢您的帮助
看看Django的Form功能——特别是ModelChoiceField——它解决了这个问题。
如果你想内省一个模型,看看它有什么字段,看看model._meta.fields
。
例如,下面的代码打印出模型实例instance
上每个字段的值:
for field in instance._meta.fields:
print field.attname, '=', getattr(model, field.attname)
你的objects
变量是一个QuerySet,当物化是一个"对象列表",所以要获得对象属性列表,你应该迭代它们:
objects = data.objects.all()
type_data = []
date_date = []
for obj in objects:
type_data.append(obj.type)
date_date.append(obj.date)
,但我认为你真正需要的下拉菜单是有一个id为每个值(但我可能是错的):
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>