Как просмотреть словарь с внешним ключом к себе на уровне шаблона в Django - PullRequest
0 голосов
/ 26 марта 2012

У меня есть 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 '}] 

Я хочу напечатать значения «Подкатегории, Сообщение» и «Имя» из каждого содержимого словаря в файле category.html. Принимая во внимание, что sub_categories возвращают "id" (внешний ключ для указания себя). Я новичок в Django, и у меня были похожие вопросы, но у меня это не получилось: (

данные должны быть распечатаны следующим образом по адресу category.html:

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

1 Ответ

2 голосов
/ 26 марта 2012

Обычно мы используем QuerySet.all (), который возвращает объекты экземпляра модели, вместо QuerySet.values ​​().

Если у вас есть поле с именем foo, которое является ForeignKey,Вызов default values ​​() вернет ключ словаря с именем foo_id, поскольку это имя атрибута скрытой модели, в котором хранится фактическое значение (атрибут foo относится к связанной модели).

Проверьтеdoc: 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 %}
...