python - Django 列出匹配父级的类实例
问题描述
我是 Django 新手,因此感谢您的帮助。我有一节课Gym
和二节课Route
(攀岩馆和攀岩路线)。每个gym
可以包含多个routes
,但每条路线只能属于一个健身房。我可以列出可用的健身房并单击一个转到健身房页面,但我想列出属于它的所有路线并且不知道如何。
# /gym/models.py
from django.db import models
from django.shortcuts import reverse
class Gym(models.Model):
name = models.CharField(max_length=100)
image = models.ImageField(upload_to='gym', default='default_route.jpg')
address = models.CharField(max_length=200)
def get_absolute_url(self):
return reverse('gym:detail', kwargs={'pk': self.pk})
def __str__(self):
return self.name
# route/models.py
from django.db import models
from .utils import generate_qrcode
class Route(models.Model):
Gym = models.ForeignKey('gym.Gym', on_delete=models.CASCADE, null=True)
grade = models.CharField(max_length=10)
hold_color = models.CharField(max_length=20, default='')
rating = models.PositiveIntegerField()
date = models.DateTimeField(auto_now_add=True)
image = models.ImageField(upload_to='routes', default='default_route.jpg')
def __str__(self):
return str(self.pk)
# gym/views.py
from django.shortcuts import render, get_object_or_404
from django.views.generic import ListView, DetailView
from .models import Gym
from route.models import Route
def gym_list_view(request):
# Can filter this for specific gyms
qs = Gym.objects.all()
return render(request, 'gym/index.html', {'gym_list': qs})
def gym_detail_view(request, pk):
gym_obj = Gym.objects.get(pk=pk)
# This is where I don't know how to get the routes that belong to the current gym
routes_obj = Route.objects.get(pk=pk)
return render(request, 'gym/detail.html', {'gym_object': gym_obj, 'routes_obj': routes_obj})
# gym/templates/gym/detail.html
{% extends "base.html" %}
{% block title %}
{{ gym_object.pk }}
{% endblock title %}
{% block content %}
Gym ID: {{gym_object.pk }} <br><br>
<h3> {{ gym_object.name }} </h3>
{{ gym_object.address }}
<br><br>
<h4>Routes</h4>
route_obj: {{ routes_obj }}
{% endblock content %}
解决方案
def gym_detail_view(request, pk):
gym_obj = Gym.objects.get(pk=pk)
# This is where I don't know how to get the routes that belong to the current gym
routes = gym_obj.route_set.all()
return render(request, 'gym/detail.html', {'gym_object': gym_obj, 'routes': routes})
试试这个
推荐阅读
- python - 非二次二维矩阵的插值
- c# - 使用实体框架和批量更新获取错误“无效的列名”
- python - 使用 Python 抓取以在 Wordpress 上发布 (XML-RPC)
- google-apps-script - 使用 Google Apps 脚本在 Google 网站中添加/删除编辑器
- typescript - UnitTest with Jest 抛出错误:无法识别编码:'cesu8' 尝试连接 mysql 数据库
- mysql - 显示表 MYSQL 中可用的最近 3 个月的数据
- c# - 如何在视图中使用模型数据?
- c# - Json.NET 反序列化属性而不反序列化其上方的父对象
- r - 如何在 R 上创建费率
- mobile - 需要在桌面和移动设备中打开 .ics 日历文件