如何在django中创建空白模型对象?

时间:2015-05-04 22:11:37

标签: django django-models django-views

我试图在模板中构建一个表,该表显示满足特定条件的特定表的最新条目,特别是qor_json不为null或""。在某些情况下,对于给定的工具和上下文, no 记录符合条件。尽管如此,因为我想要一张桌子,我需要某种东西去那里,所以我试图以某种方式传递一个空白对象。下面的代码部分(我提供所有内容以提供上下文)是:

if action:
    print c, t+":", action[0].qor_json, action[0].time
    acts.append(action[0])
else:
    acts.append(None)

以下是完整视图。我尝试做的是能够在没有匹配对象的情况下显示空白表格单元格,但如果 ,则显示对象的任意属性。< / p>

def index(request):
    t = loader.get_template('index.html')
    all_contexts   = md.Contexts.objects.all().order_by('name')
    all_tools      = md.Tools.objects.all().order_by('name')
    latest_actions = (md.Actions.objects
                      .values('tool', 'context')
                      .annotate(max_id=Max('id'))
                     )

    actions = md.Actions.objects.exclude(qor_json__isnull=True).exclude(
        qor_json__in=[""]).filter(id__in=[
        a['max_id'] for a in latest_actions
    ])

    set_of_tools = sorted(set(a.tool.name for a in actions))
    set_of_contexts = sorted(set(a.context.name for a in actions))

    names = []
    act_rows  = []

    for c in set_of_contexts:
        acts = []
        for t in set_of_tools:
            action = filter(
                lambda a: a.tool.name==t and a.context.name==c, actions)
            if action:
                names.append(action[0].time)
                acts.append(action[0])
            else:
                names.append(None)
                acts.append(None)

        act_rows.append(acts)

    context = RequestContext(request, {
        'contexts'           : all_contexts,
        'tools'              : all_tools,
        'bundles'            : zip(names, act_rows),
        'ct'                 : 25,
    })

这是index.html模板。

<table width="90%" align="center" border=1 cellpadding=10>
<tr>
  <th></th>   {# Contexts on y-axis, Tools on x-axis #}
  {% for tl in tools %}
  <th><a href="/actions?tools={{tl.name}}&ct={{ct}}">{{ tl.name }}</a></th>
  {% endfor %}
</tr>
{% for bundle in bundles %}
  <tr>
    <th><a href="/actions?context={{ bundle.0 }}&ct={{ct}}">{{ bundle.0.qor_json }}</a></th>
    {% for action in bundle.1 %}
       <td>{{ action.qor_json }}</a></td>
    {% endfor %}
  </tr>
{% endfor %}
</table>

我的想法是,如果我可以传入一个空白的Action对象,那么action.qor_json只会打印出没有数据的那些,但是我无法弄清楚如何创建一个空白对象,因为它来自一个只从数据库中提取东西的模型。有没有更好的方法来实现我想要实现的目标?

谢谢!

1 个答案:

答案 0 :(得分:0)

Action

Django惯例是顺便打电话给你的模型Actions,而不是{{1}}。