首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用一对多relationships=revised (Django)

使用一对多relationships=revised (Django)
EN

Stack Overflow用户
提问于 2021-02-11 06:49:06
回答 2查看 18关注 0票数 0

我写了一个简单的Okay....previously -CSS-Javascript站点。然后,我创建了一个空的Django项目,并尝试将所有内容都放入该项目中。我把事情搞得一团糟!因此,我现在正在从头开始编写所有内容,首先致力于Django项目。我设置的数据库仍然有问题。这是我的models.py:

代码语言:javascript
复制
from django.db import models

# Create your models here.
class Book(models.Model):
title = models.CharField(max_length=200)
description = models.TextField()
source = models.CharField(max_length=200)
source_site = models.CharField(max_length=200)

def __str__(self):
    return self.title

class Chapter(models.Model):
book = models.ForeignKey(
    Book, on_delete=models.CASCADE, 
    related_name='chapters')
chtitle = models.CharField(max_length=100)
chtitletext = models.CharField(max_length=200)
chtext = models.TextField()

def __str__(self):
    return self.chtitle

下面是我的views.py:

代码语言:javascript
复制
from django.shortcuts import render, get_object_or_404

# Create your views here.
from django.http import HttpResponse
from .models import Book, Chapter

def index(request):
book_list = Book.objects.order_by('-id')
output = ', '.join([b.title for b in book_list])
context = {
    'book_list': book_list,
}
return render(request, 'sophia/index.html', context)

def readBook(request, book_id):
book = get_object_or_404(Book, pk=book_id)
chapter_list = Chapter.objects.order_by('-id')

context = {'book':book, 'chapter_list':chapter_list}
return render(request, 'sophia/readbook.html', context)

下面是我的urls.py:

代码语言:javascript
复制
from django.urls import path

from . import views
app_name = 'sophia'
urlpatterns = [
path('', views.index, name='index'),
path('<int:book_id>/', views.readBook, 
name='readbook'),
]

最后,我的readbook.html:

代码语言:javascript
复制
<h1>{{ book }}</h1>
<h3>{{ book.description }}</h3>
<h3>{{ book.source }}</h3>
<h3>{{ book.source_site }}</h3>

<ul>
{% for chapter in chapter_list %}
<li>{{ chapter.chtitle }} -- {{ chapter.chtitletext }} 
 </li>
{% endfor %}
</ul>

图书模型中的字段显示得很好。但是chapter_list包含了章节模型中的所有章节。我只想要书里的章节。(有人知道为什么我的book_list和chapter_list顺序颠倒吗?)

哦,这是一个截图:

readBook.html

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-11 07:25:51

你只需要过滤你的章节查询集:

代码语言:javascript
复制
chapter_list = Chapter.objects.filter(book=book).order_by('-id')

你可能想要在你的章节模型上添加一个order_id或chapter_number字段,这样你就可以更好地控制它们的显示顺序。

票数 0
EN

Stack Overflow用户

发布于 2021-02-11 07:32:17

我想你可以这么说

代码语言:javascript
复制
def readBook(request, book_id):
    book = get_object_or_404(Book, pk=book_id)
    chapter_list = Chapter.objects.filter(book=book).order_by('-id') # you scpecify wich book the chapters are from
    context = {'book':book, 'chapter_list':chapter_list}
    return render(request, 'sophia/readbook.html', context)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66146270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档