如何在Django中在模板级别查看具有外键的字典

时间:2012-03-25 23:27:46

标签: python django django-models django-templates django-views

我有一个像这样的model.py:

class EventTypeCategory(models.Model):

      name = models.CharField(max_length=50, verbose_name="Name")
      user = models.ForeignKey(User, verbose_name="User")
      Message_slug = models.SlugField(blank=True, verbose_name="Message")
      sub_categories = models.ForeignKey('self', verbose_name="Self-Categories", null =True, blank = True)

而sub_categories字段是其自身的外键

我有一个像这样的view.py:

@login_required
def eventcateg_detail(request):
    ca = EventTypeCategory.objects.values()
    return render_to_response('events/categ.html',{
        'obj': ca,
        })

而ca返回字典如下:

[{'Message_slug': u'ngcg', 'sub_categories_id': 124L, 'user_id': 1L, 'id': 146L, 'name': u'ngcg'}, {'Message_slug': u'lkn', 'sub_categories_id': 146L, 'user_id': 1L, 'id': 149L, 'name': u'lkn '}] 

我想从categ.html的每个字典内容中打印“子类别,消息”和“名称”的值。而sub_categories返回“id”(指向自身的外键)。我是Django的新手,也有类似的问题,但它对我不起作用:(

数据应该在categ.html上打印:

Message:    Name:    Sub-categories:
ngcg        ngcg      (values which refer to foriegn key)

1 个答案:

答案 0 :(得分:2)

通常,我们使用QuerySet.all()来返回模型实例对象,而不是QuerySet.values()。

  

如果您有一个名为foo的字段,它是ForeignKey,则为默认值   values()调用将返回一个名为foo_id的字典键,因为这个   是存储实际值的隐藏模型属性的名称   (foo属性指的是相关模型)。

检查文档: django.db.models.query.QuerySet.values

@login_required
def eventcateg_detail(request):
    ca = EventTypeCategory.objects.all()
    return render_to_response('events/categ.html',{
        'objs': ca,
        })

现在,obj是一个EventTypeCategory实例。

{% for obj in objs %}
    {{obj.Message_slug}}, {{obj.name}}, {{obj.sub_categories.name}}
    ngcg,                 ngcg,         (name of instance which refer to foriegn key)
{% endfor %}