首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django -从parents DetailView创建或更新反向外键对象

Django是一个开源的Python Web框架,它提供了一套完整的工具和库,用于快速开发高质量的Web应用程序。Django的核心理念是DRY(Don't Repeat Yourself),它鼓励开发者遵循最佳实践,减少重复的代码和逻辑。

在Django中,DetailView是一个通用视图类,用于显示一个对象的详细信息。它可以根据URL中的参数获取对象,并将其传递给模板进行渲染。在这个问题中,我们需要从父对象的DetailView中创建或更新反向外键对象。

要实现这个功能,我们可以按照以下步骤进行操作:

  1. 创建URL模式:首先,我们需要在urls.py文件中创建一个URL模式,将其与DetailView关联起来。例如:
代码语言:txt
复制
from django.urls import path
from .views import ParentDetailView

urlpatterns = [
    path('parent/<int:pk>/', ParentDetailView.as_view(), name='parent-detail'),
]
  1. 创建视图类:接下来,我们需要创建一个继承自DetailView的视图类,用于处理父对象的详细信息显示。在这个视图类中,我们可以通过重写get_context_data方法来获取父对象,并将其传递给模板。例如:
代码语言:txt
复制
from django.views.generic import DetailView
from .models import Parent

class ParentDetailView(DetailView):
    model = Parent
    template_name = 'parent_detail.html'
    context_object_name = 'parent'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['child'] = self.object.child  # 获取反向外键对象
        return context
  1. 创建模板:然后,我们需要创建一个模板(parent_detail.html),用于渲染父对象和反向外键对象的详细信息。在模板中,我们可以通过使用Django模板语言(DTL)来访问和显示对象的属性。例如:
代码语言:txt
复制
<h1>{{ parent.name }}</h1>
<p>{{ parent.description }}</p>

<h2>Child Object</h2>
<p>{{ child.name }}</p>
<p>{{ child.description }}</p>

通过以上步骤,我们就可以实现从父对象的DetailView中创建或更新反向外键对象的功能。当访问URL /parent/1/时,Django将会根据指定的父对象ID(1)获取父对象,并将其传递给模板进行渲染。同时,我们也可以通过context['child']获取反向外键对象,并在模板中显示其详细信息。

对于这个问题中的推荐腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,我无法给出具体的推荐。但是,腾讯云作为一家知名的云计算服务提供商,提供了丰富的云计算产品和解决方案,可以满足各种应用场景的需求。你可以访问腾讯云的官方网站,了解更多关于其云计算产品和服务的信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

django 1.8 官方文档翻译: 3-4-2 内建显示视图

Django尝试model和 template层移除一些单调的情况,但是Web开发者依然会在view(视图)层经历这种厌烦。 Django的通用视图被开发用来消除这一痛苦。...在年/月/日归档页面,以及详细页面和“最后发表”页面中,展示以数据库为基础的对象。 允许用户创建更新和删除对象 – 以授权或者无需授权的方式。...默认的实现只是简单的 给模板添加了要展示的对象,但是你这可以这样覆写来展示更多信息: from django.views.generic import DetailView from books.models...如果没有任意两个类尝试定义相同的,会返回异常的结果。...然而,model参数并不是唯一能够指明视图要基于哪个对象进行操作的方法 – 你同样可以使用queryset参数来指定一个对象列表: from django.views.generic import DetailView

1.4K40

django 1.8 官方文档翻译: 1-2-4 编写你的第一个Django应用,第4部分

当你创建一个表单为了修改服务器端的数据时,请使用 method=”post” 。这不是 Django 特定的技巧;这是优秀的 Web 开发实践。...现在,让我们来创建一个 Django 视图来处理提交的数据。 记得吗?在 教程 第3部分 中,我们为 polls 应用创建了一个 URLconf 配置中包含有这一行代码: url(r'^(?...每次投票后你将会看到结果页数据都有更新。 如果你没有选择投票选项就提交了,将会看到错误的信息。...DetailView 通用视图期望 URL 中捕获名为 “pk” 的主键值,因此我们将 poll_id 改为 pk 。...在 DetailView 中 poll 变量是自动提供的 – 因为我们使用了一个 Django 模型 (Poll) ,Django 能够为上下文变量确定适合的名称。

1.4K10

Django 1.10中文文档-第一个应用Part4-表单和通用视图

现在,创建一个Django视图来处理提交的数据,在Part3中已经创建了一个URLconf ,包含这一行: # polls/urls.py url(r'^(?...应该看到一个投票结果页面,并且在每次投票后都会更新。 如果提交时没有选择任何Choice,应该会看到错误信息。 注: views()视图的代码确实有一个小问题。...这里使用两个通用视图:ListView和DetailView。这两个视图分别代表“显示对象列表”和“显示特定类型对象的详细信息页面”的抽象概念。 每个通用视图需要知道它将作用于哪个模型。...这由model 属性提供; DetailView都是URL中捕获名为"pk"的主键值,因此才需要把polls/urls.py中question_id改成了pk以使通用视图可以找到主键值。...而对于DetailView,question变量会被自动提供,因为我们使用了Django的模型(Question),Django会智能的选择合适的上下文变量。

2.3K40

Django内置的通用类视图CBV及示例

HTML template 一般网站中使用模板显示的页 ListView 显示对象列表 文章列表页 DetailView 显示对象详情 文章详细页 FormView 提交From 网站联系我们emai...订阅form CreateView 创建对象 创建新文章页 UpdateView 更新对象 修改文章页 DeleteView 删除对象 删除文章页 Generic date views 显示一段时间内的对象...显示用于创建对象的表单的视图,通过验证错误信息重新显示视图,并且保存对象....显示用于编辑现有对象的表单的视图,重新显示具有验证错误信息的视图,并且保存对象.这里使用对象模型自动生成的表单(除非手动制定表单类)....实例 1、创建django工程,创建名为crud的app,此处略过 2、 修改models.py class employee(models.Model): id = models.IntegerField

3.2K10

Django开发网页计数器统计页面浏览次数

第一步 建立APP,设置URL 我们创建一个叫demo的项目,并利用python manage.py startapp blog创建一个名叫blog的APP,并把它加入到settings.py中INSTALLED_APP...注意viewed方法里我们使用了save(update_fields=['views']), 这样我们只需要更新views的字段,而不是更新全表,可以减轻数据库写入的工作量。...# blog/views.py from django.views.generic import DetailView from .models import Article class ArticleDetailView...ArticleDetailView通过URL传递过来的参数(id=6)获取当前文章对象,并通过模板blog/article_detail.html显示。...每次通过get_object方法获取文章对象后, 还调用该对象的viewed的方法,使计数增加1。 用户每次重新访问/blog/article/6/刷新浏览器,计数器都会增加1。

2.1K20

django 1.8 官方文档翻译: 3-4-5 内建基于类的视图的API

基础视图 View TemplateView RedirectView 通用的显示视图 DetailView ListView 通用的编辑视图 FormView CreateView UpdateView...这表示不应该使用列表、字典其它可变对象作为视图的参数。如果你真这么做而且对共享的对象做过修改,某个用户的行为可能对后面访问同一个视图的用户产生影响。...Django 的通用视图建立在基础视图之上,用于作为经常用到的功能的快捷方式,例如显示对象的详细信息。它们提炼视图开发中常见的风格和模式并将它们抽象,这样你可以快速编写常见的视图而不用重复你自己。...大部分通常视图需要queryset ,它是一个查询集 实例;关于查询集对象的更多信息,请参见执行查询。 译者:Django 文档协作翻译小组,原文:API reference。...Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。

82920

基于django的视频点播网站开发-step5-详情页功能

上一讲,我们创建的字段有title、desc、classification、file、cover、status、create_time。...怎么显示详情呢,聪明的django为我们提供了DetailView。urls.py中设置的视图类是VideoDetailView,我们让VideoDetailView继承DetailView即可。...效果图上我们看到还有个观看次数的展示,这里的观看次数本质上就是数据库里的一个自增字段,每次观看的时候,view_count自动加1。...因为每次调用DetailView的时候,django都会回调get_object()这个函数。因此我们可以把increase_view_count()放到get_object()里面执行。...当获取到page和page_size后,使用paginator对象来实现分页。最后通过render_to_string将html传递给模板。

2.1K30

基于python的种子搜索网站(二)开发过程

网站演示: https://bt.mypython.me 源码地址: https://github.com/geeeeeeeek/bt 项目开发过程 项目简介 该项目是基于python的web类库django...在该项目中,笔者开发了一个简单版的搜索网站,实现了对数据库数据的检索和更新。...网站域名为bt.mypython.me 启动项目 django-admin startproject bt 创建应用 python3 manage.py startapp app model设计 主要是对提交的链接进行设计...详情页 我们再来开发详情页,urls.py中看到,详情页是由DetailView来实现的,我们来窥探它的全貌: class DetailView(generic.DetailView): model...return reverse('app:commit') 它是继承自CreateView,因为是创建操作嘛,在post中,我们通过ratelimit来限制提交次数。

1.2K31

Python-Django 第一个Django app

python内置组件,Django组件命名项目,特别是django(和Django自身冲突)test(和python内置模块冲突)。...激活模块 上述模块代码给Django提供了许多信息,拥有它,Django可: 1)为该app创建数据库模式(CREATE TABLE语句) 2)为访问Question和Choice对象创建Python...会自动添加主键 id(可重写) 2)约定的,Django会添加”_id”到外域(可重写) 可执行python manage.py check,在不执行迁移改动数据库的情况下,来检查项目中的问题 接着...第一个 Django app Part3 Django中,web页面和其它内容都是views派生的,每个view由python函数(方法)表示,Django通过检查请求的域名后面的那部分URL来选择...DetailView视图期望ULR捕获的主键值被称为pk,所以把question_id改成了pk 默认的DetailView视图使用名为/_detail.html

1.2K30

Django内置的通用类视图及实例

get_context_data(**kwargs): 返回显示对象的上下文数据,通过覆盖该方法返回额外的上下文 2.DetailView ?...get_context_data(**kwargs):返回显示对象的上下文数据. 4.CreateView ? 显示用于创建对象的表单的视图,通过验证错误信息重新显示视图,并且保存对象....显示用于编辑现有对象的表单的视图,重新显示具有验证错误信息的视图,并且保存对象.这里使用对象模型自动生成的表单(除非手动制定表单类)....实例 1、创建django工程,创建名为crud的app,此处略过 2、 修改models.py class employee(models.Model): id = models.IntegerField...,ListView from django.utils import timezone from django.views.generic.detail import DetailView from

2.9K40

概述

在其内部,它主要还负责数据库中获取数据、处理表单数据、保存数据到数据库、以及渲染指定的 HTML 模板等。...类视图比函数视图提供了更加高层的抽象,它将上边提及的数据库操作、表单处理、模板渲染等通用操作抽取为类视图中的方法,函数的参数、状态等则抽取为类视图的属性,最终通过一个 as_view 方法将整个类视图转换为一个可调用对象...detail.py 主要存放用于数据库获取单条记录的类视图,例如从数据库中获取某一篇博客文章。 edit.py 主要包含了表单处理,创建更新和删除数据库中的单条记录的类视图。...完全类似的,DetailView 也是同一套路: ContextMixin --> SingleObjectMixin - + |...| | View ------------------------------- + | --> DetailView

1.3K70

Django 官方推荐的姿势:类视图

作者:HelloGitHub-追梦人物[1] 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库[2] 点击本文最下方的“阅读原文”即可获取 在开发网站的过程中,有一些视图函数虽然处理的对象不同...对处理首页的视图函数来说,虽然其处理的对象一个是文章,另一个是帖子,但是其处理的过程是非常类似的:首先是数据库取出文章或者帖子列表,然后将这些数据传递给模板并渲染模板。...DetailView 除了数据库中获取模型列表的数据外,数据库获取模型的一条记录数据也是常见的需求。比如查看某篇文章的详情,就是数据库中获取这篇文章的记录然后渲染模板。...对于这种类型的需求,django 提供了一个 DetailView 类视图。..., DetailView # 记得在顶部导入 DetailView class PostDetailView(DetailView): # 这些属性的含义和 ListView 是一样的

1.3K20

Django 1.10中文文档-第一个应用Part5-测试

看起来似乎有点人类,但实际上这种方法与大多数人经常的做法很相似:先描述一个问题,然后编写代码来解决这个问题。测试驱动开发可以简单地用Python测试用例将问题格式化。...Client >>> # 创建一个Client实例 >>> client = Client() 下面是具体的一些使用操作: >>> # '/'获取响应 >>> response = client.get...所以我们需要给DetailView视图添加一个这样的约束: # polls/views.py class DetailView(generic.DetailView): ......有时,测试程序需要更新。...经验上来说,好的做法是: 为每个模型视图创建一个专属的TestClass 为你想测试的每一种情况建立一个单独的测试方法 为测试方法命名时最好字面上能大概看出它们的功能 进一步测试

97760
领券