Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从queryset值访问django模板上的外键_Python_Django - Fatal编程技术网

Python 从queryset值访问django模板上的外键

Python 从queryset值访问django模板上的外键,python,django,Python,Django,我就是找不到我做错了什么。这是我的设置 from django.db import models from django.conf import settings """ Simple model to handle blog posts """ class Category(models.Model): def __unicode__(self): return self.name name = models.CharField(max_length=50

我就是找不到我做错了什么。这是我的设置

from django.db import models
from django.conf import settings

"""
Simple model to handle blog posts
"""
class Category(models.Model):

    def __unicode__(self):
        return self.name

    name = models.CharField(max_length=50)

class BlogEntry(models.Model):

    def __unicode__(self):
        return self.blog_post_name

    blog_post_name = models.CharField(max_length=200)
    blog_post_content = models.CharField(max_length=1024)
    blog_pub_date = models.DateTimeField(auto_now=True)
    blog_post_image = models.ImageField(upload_to = settings.MEDIA_ROOT, default = '/media_files/douche.jpg')
    blog_post_category = models.ForeignKey(Category)


views.py

    from django.shortcuts import render
    from blog_post.models import BlogEntry, Category
    from blog_post.forms import BlogPostForm
    from django.shortcuts import HttpResponseRedirect
    from time import gmtime, strftime

    """
    This method will display all user posts (newest first)
    """
    def home(request):
         blog_template = "blogs.html"
         list_all_posts = BlogEntry.objects.all().order_by('-blog_pub_date').values() # List all posts on DB ordered by date (newest first).
    return render(request, blog_template, locals())
在模板上,我可以访问blog_post_category_id的值,但我想显示类别的实际名称

我已经试过模板了

{% extends "base.html" %}
{% load split_string %}
{% block content %}
<div class="row">
    <div class="large-6 columns">
        {% if list_all_posts %}

        {% for post in list_all_posts %}
        <ul class="pricing-table">
            <li class="title">{{ post.blog_post_name }}</li>
            <li class="bullet-item">
            <a class="fancybox" href="/media_files/{{ post.blog_post_image|img_path_last_value:'/' }}" title="{{ post.blog_post_content }}" >
                <img src="/media_files/{{ post.blog_post_image|img_path_last_value:'/' }}" alt="" />
            </a>
            </li>
            {% for cat in post.category_set.all %}
            <li class="price">{{ cat.category_name }}</li>
            {% endfor %}
            <li class="description">{{ post.blog_post_content}}</li>
        </ul>
        {% endfor %}
        {% endif %}

    </div>
</div>
{% endblock %}
{%extends“base.html”%}
{%load split_string%}
{%block content%}
{%if列出所有帖子%}
{列表中帖子的百分比\u所有帖子%}
  • {{post.blog\u post\u name}
  • {post.category_set.all%}
  • {{cat.category\u name}
  • {%endfor%}
  • {{post.blog\u post\u content}
{%endfor%} {%endif%} {%endblock%}
有人能解释一下吗

提前感谢。

来自

.values()
返回一个ValuesQuerySet-一个QuerySet子类,当用作iterable而不是model实例对象时,它返回字典。

这意味着您将无法调用
post.category\u set.all
,因为post是一个字典而不是一个模型实例,您需要指定字典中包含的字段,当您这样做时,您可以包含
blog\u post\u category\u name
,它将在模板中显示类别名称

list_all_posts = BlogEntry.objects.all().order_by('-blog_pub_date').values()
您必须了解,在queryset上执行
.values()
时,Django会从SQL关系中收集值并将其存储在字典中。因此,is存储外键的ID,但任何其他信息都会丢失

所以你有很多解决办法。以下是两种解决方案:

1) 将填充了给定数据的dict返回到模板:

例如:
.values('blog\u post\u name'、'blog\u post\u category\u name')

2) 返回仅包含所需数据的查询集

例如:
。仅限('blog\u post\u name')。选择相关('blog\u post\u category\u name')


select\u related用于避免Django在您尝试从queryset在模板中显示类别名称时再次调用DB

您是否尝试过
blog\u post\u category\u name
?感谢您的帮助。这就成功了:list_all_posts=bloggentry.objects.all().order_by('-blog_pub_date')。值('blog_post_name','blog_post_content','blog_post_category_name','blog_post_image'))