首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从queryset值访问django模板的外键

从queryset值访问django模板的外键
EN

Stack Overflow用户
提问于 2013-08-07 22:16:29
回答 2查看 7.1K关注 0票数 2

我只是找不到我做错了什么。这是我的装置

代码语言:javascript
运行
AI代码解释
复制
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的值,但我想显示类别的实际名称。

我试过模板set.all

代码语言:javascript
运行
AI代码解释
复制
{% 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 %}

有人能解释一下这件事吗?

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-07 22:30:33

来自文档

.values() Returns a ValuesQuerySet — a QuerySet subclass that returns dictionaries when used as an iterable, rather than model-instance objects.

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

票数 10
EN

Stack Overflow用户

发布于 2013-08-08 00:00:18

代码语言:javascript
运行
AI代码解释
复制
list_all_posts = BlogEntry.objects.all().order_by('-blog_pub_date').values()

您必须理解,当您在查询集上执行.values()时,Django收集来自SQL关系的值,并将其存储在一个字典中。因此,是存储外键的ID,但任何其他信息都丢失了!

所以你周围有很多工作。以下是两种解决方案:

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

例如:.values('blog_post_name', 'blog_post_category__name')

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

例如:.only('blog_post_name').select_related('blog_post_category__name')

当您试图在queryset的模板中显示类别名称时,select_related是为了避免Django再次调用DB

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18119119

复制
相关文章
【约束布局】ConstraintLayout 13 种相对定位属性组合 ( 属性组合 | 用法说明 )
相对定位 属性 组合 前提 : 以 水平方向的 Left , Right 为例 ;
韩曙亮
2023/03/27
8170
【约束布局】ConstraintLayout 13 种相对定位属性组合 ( 属性组合 | 用法说明 )
RelativeLayout(相对布局)
相对布局的子控件会根据它们所设置的参照控件和参数进行相对布局。 参照控件:aclock   控件与容器之间 android:layout_alignParentLeft="true" 位于父容器左上角 android:layout_alignParentBottom, android:layout_alignParentTop, android:layout_alignParentRight 只能在父控件为RelativeLayout时才起作用,而对于像LinearLayout这样的布局不起作用 andro
欢醉
2018/01/22
1.2K0
RelativeLayout(相对布局)
相对布局RelativeLayout(三)
最新Android开发视频教程(共6章)Android Studio教程(2017-2018) 19 Android 相对布局的使用(视频+笔记,从01开始点点入门) Android studio 相对布局常见属性 Android----------线性布局和相对布局的使用
李小白是一只喵
2020/04/24
9870
android 相对布局(RelativeLayout)
RelativeLayout可以设置某一个控件相对于其他控件的位置,这些位置可以包括上下左右等,因而相较于其他的布局方式而言具有很大的灵活性。
Twcat_tree
2022/11/30
1K0
【鸿蒙 HarmonyOS】UI 布局 ( 相对布局 DependentLayout )
下面的相对布局中 text1 组件没有设置任何位置属性 , 默认放在屏幕左上角 ;
韩曙亮
2023/03/28
6920
【鸿蒙 HarmonyOS】UI 布局 ( 相对布局 DependentLayout )
Flutter 相对布局之Stack
相对布局,类似于android中的RelativeLayout、FrameLayout。 既可以相对父容器确定自己的位置,也可以多个widget重叠显示。 Stack与Positioned搭配使用。
yechaoa
2022/06/10
8050
Flutter 相对布局之Stack
轻松掌握RelativeLayout相对布局
在前面三期中我们对LinearLayout进行了详细的解析,LinearLayout也是我们用的比较多的一个布局。但在实际开发中使用LinearLayout远远不够,我们本期一起来学习RelativeLayout。 一、认识RelativeLayout RelativeLayout,又叫相对布局,使用<RelativeLayout>标签。相对布局通常有两种形式,一种是相对于容器而言的,一种是相对于控件而言的。 下表显示了RelativeLayout支持的常用XML属性及相关方法的说明
分享达人秀
2018/02/02
1K0
轻松掌握RelativeLayout相对布局
[android] 相对布局和单位简介
/**********************2016年4月23日 更新*******************************/
唯一Chat
2019/09/10
5120
[android] 线性布局和布局的组合
/****************2016年4月25日 更新******************************/
唯一Chat
2019/09/10
5830
Android基础_3 Activity相对布局
相对布局要比前面讲的线性布局和表格布局要灵活一些,所以平常用得也是比较多的。相对布局控件的位置是与其周围控件的位置相关的,从名字可以看出来,这些位置都是相对的,确定出了其中一个控件的位置就可以确定另一个控件的位置了。
shirayner
2018/08/10
5440
Android基础_3   Activity相对布局
Android开发中RelativeLayout相对布局
        RelativeLayout布局是Android界面布局中应用最广也最强大的一种布局,其不仅十分灵活,可以解决开发中各种界面布局需求,同时也很方便了解决了多屏幕尺寸的适配问题。在iOS开发中,Autolayout技术总是被赞不绝口,RelativeLayout布局就是Andriod系统中的Autolayout,其又被称为相对布局。
珲少
2018/08/15
1.2K0
Android开发中RelativeLayout相对布局
Android入门教程 | UI布局之RelativeLayout 相对布局
RelativeLayout 和 LinearLayout 类似,都是 ViewGroup,能“容纳”多个子view。
Android_anzi
2021/12/06
2.9K0
IOS开发之绝对布局和相对布局(屏幕适配)
之前如果做过Web前端页面的小伙伴们,看到绝对定位和相对定位并不陌生,并且使用起来也挺方便。在IOS的UI设计中也有绝对定位和相对定位,和我们的web前端的绝对定位和相对定位有所不同但又有相似之处。下面会结合两个小demo来学习一下我们IOS开发中UI的绝对定位和相对定位。在前面的博客中所用到的UI事例用的全是绝对定位,用我们Storyboard拖拽出来的控件全是绝对定位的,就是我们可以同改变组件的frame来改变组件的位置和大小。而相对定位则不同,相对定位是参考组件周围的元素来确定组件的大小或位置,相对定
lizelu
2018/01/11
2.3K0
IOS开发之绝对布局和相对布局(屏幕适配)
[android] 优酷环形菜单-相对布局练习
布局文件,使用<RelativeLayout/>控件作为第一级菜单,相对布局,位于父控件的底部,水平居中,因为图片不是特别的标准,因此宽度和高度都钉死,宽度是高度的两倍
唯一Chat
2019/09/10
9560
[android] 优酷环形菜单-相对布局练习
Android精通:TableLayout布局,GridLayout网格布局,FrameLayout帧布局,AbsoluteLayout绝对布局,RelativeLayout相对布局
TableLayout是将子类向分别排列成行和列的布局视图容器,TableLayout是由许多TableRow对象组成的,表格布局以行列的形式管理子控件,每一个单元是一个TableRow或者View对象。
达达前端
2019/07/03
4.2K0
Android精通:TableLayout布局,GridLayout网格布局,FrameLayout帧布局,AbsoluteLayout绝对布局,RelativeLayout相对布局
小程序布局中相对定位的用法
小程序中一般为了有一定的设计效果,会将下边组件的内容提升一点到上边去,比如我们的电商展示模板里,会将商品列表覆盖一点到背景图,效果如下:
低代码布道师
2023/10/11
2790
Android开发学习笔记(六)相对布局RelativeLayout
两个值true对齐,false不对齐 相对某个控件layout_toLeftOfs (例子中没写)
zstar
2022/06/14
2400
Android开发学习笔记(六)相对布局RelativeLayout
R语言 绘图组合布局grid/layout
par(mfrow=c(2,2)),可以理解将绘图区域分割为2x2的矩阵区域,另可参照《R语言实战》3.5图形的组合
拴小林
2020/07/10
2.1K0
R语言 绘图组合布局grid/layout
Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件
对于Android应用程序中,所有用户界面元素都是由View和ViewGroup对象构建的。View是绘制在屏幕上能与用户进行交互的一个对象。而对于ViewGroup来说,则是一个用于存放其他View和ViewGroup对象的布局容器!
达达前端
2019/07/03
1.9K0
Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件
点击加载更多

相似问题

多次更改相对布局的高度

10

使用相对布局多次调用SEC_Overlay

10

在父视图中多次动态包含XML相对布局

10

相对布局放置到其他相对布局

72

相对布局

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档