假设我有一个名为app的Django应用程序。在其中我有一个在models.py中定义的模型类命名数据。另外,我在模板目录中有一个html文件,其中有几个选项列表,应该使用模型的字段填充,例如类型,日期。 我需要做的是获取views.py中的字段列表,并用它们填充选项列表。另一件事是,在用户通过选择选项列表中的值提交查询后,我将向他们显示一个表格,显示模型中所有字段的值。所以基本上我必须检索用户输入的内容,并通过输入进行查询,并根据查询获取模型中所有字段的数据。我们可以命名另外两个字段时间,值。这些事情应该主要在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 object get/set field所以我基本上使用它来从模型中获取字段数据:getattr(obj, 'field_name')
有什么想法?我感谢任何帮助
答案 0 :(得分:1)
查看Django's Form功能 - 特别是ModelChoiceField - 它解决了这个问题。
如果您想要内省模型以查看其中包含的字段,请查看model._meta.fields
。
例如,以下代码打印出模型实例instance
上每个字段的值:
for field in instance._meta.fields:
print field.attname, '=', getattr(model, field.attname)
答案 1 :(得分:1)
你的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>
但请记住,django可以简化这个过程 - 阅读表格。