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



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

但是要记住,django可以简化这个过程——阅读表单。

最新更新