什么Django queryset在功能上等同于需要输入的MySQL存储过程?

什么Django queryset在功能上等同于需要输入的MySQL存储过程?,mysql,django-queryset,Mysql,Django Queryset,我有一个MySQL数据库,其中有列出独立生成器、RPG系统和类型等的表。我的几个表以某种方式连接到我的类型表。在Django中,我想构建一个模板,将该类型的slug作为参数,并显示数据库中所有相关图表、RPG系统、模块等的列表,作为一种简单的参考。我从来没有认真使用过Django querysets,我在选择正确的方法来获得我需要的东西时遇到了问题 我运行的是MySQL版本8.0.17(MySQL社区服务器-GPL),我的Django版本是(2,2,6,'final',0) 这是一个存储过程,它

我有一个MySQL数据库,其中有列出独立生成器、RPG系统和类型等的表。我的几个表以某种方式连接到我的类型表。在Django中,我想构建一个模板,将该类型的slug作为参数,并显示数据库中所有相关图表、RPG系统、模块等的列表,作为一种简单的参考。我从来没有认真使用过Django querysets,我在选择正确的方法来获得我需要的东西时遇到了问题

我运行的是MySQL版本8.0.17(MySQL社区服务器-GPL),我的Django版本是(2,2,6,'final',0)

这是一个存储过程,它将把genre_slug作为参数,并返回适合该类型的表列表:

DELIMITER @@

CREATE PROCEDURE genres_tables
#genre_slug is provided by the link clicked on by the user
(IN slug VARCHAR(72))
BEGIN
SELECT g.genre, t.`table_name`
FROM generators_genre g
#Joins to get to D100Generator table
INNER JOIN generators_d100generator t
ON g.genre=t.genre_id_id
WHERE t.genre_id_id = (
    SELECT genre
    FROM generators_genre
    WHERE genre_slug = slug); /*The slug is provided by the link clicked on*/
END @@

DELIMITER ;
类型和表格(D100Generator)模型:

views.py:

from django.shortcuts import get_object_or_404, render
from .models import Genre, D100Generator

def genre(request, slug):
    genre_page = get_object_or_404(Genre, pk=slug)
    chosen_genre = Genre.objects.get(genre_slug__exact=slug)
    genre_tables = D100Generator.objects.get(genre_id__exact=chosen_genre.genre)

    context = {
        'genre_page': genre_page,
        'genre_tables': genre_tables,
    }
    return render (request, 'generators/genre.html', context)
def genre(request, genre_slug):
    genre_page = get_object_or_404(Genre, pk=genre_slug)
    g = genre_slug
    genre_tables = D100Generator.objects.filter(genre_id__exact=g)

    context = {
        'genre_page': genre_page,
        'genre_tables': genre_tables,
    }
    return render (request, 'generators/genre.html', context)
genre.html模板:

<h1>{{ genre_page.genre_name }}</h1>

<p>This genre is referenced by the following:</p>

<h2>Tables</h2>
<ul>
{% for table in genre_tables %}
    <li><a href="{% url 'generators:table' table_slug=table.pk %}">{{ table.table_name }}</a></li>
{% endfor %}
</ul>
{{genre\u page.genre\u name}
以下内容引用了此类型:

桌子
    {类型_tables%}中的表的%
  • {%endfor%}
在genre.html页面上,我得到错误“doesnotexistat/generators/genre/9

类型匹配查询不存在。“

我希望URL在给定的URL中显示的是genre_slug,而不是主键'genre'。也许我在我的观点中使用了错误的逻辑,将重点放在类型上。py:

def genre(request, genre_slug):
    genre_page = get_object_or_404(Genre, pk=genre_slug)
    g = genre_slug
    genre_tables = D100Generator.objects.filter(genre_id__exact=g)

    context = {
        'genre_page': genre_page,
        'genre_tables': genre_tables,
    }
    return render (request, 'generators/genre.html', context)