如何从模型中获取现场数据?

时间:2011-04-07 03:08:10

标签: python django model field

假设我有一个名为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')

有什么想法?我感谢任何帮助

2 个答案:

答案 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可以简化这个过程 - 阅读表格。