gpt4 book ai didi

mysql - 哪些 Django 查询集的功能相当于需要输入的 MySQL 存储过程?

转载 作者:行者123 更新时间:2023-11-29 15:31:00 27 4
gpt4 key购买 nike

我有一个 MySQL 数据库,其中有列出独立生成器、RPG 系统和类型等的表格。我的几个表以某种方式连接到我的 Genre 表。在 Django 中,我想构建一个模板,将流派的 slug 作为参数,并显示数据库中找到的所有相关图表、RPG 系统、模块等的列表,作为一种简单的引用。我从未认真使用过 Django 查询集,并且在选择正确的方法来获取我需要的内容时遇到问题。

我正在运行 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)模型:

class Genre(models.Model):
genre = models.AutoField(primary_key=True)
genre_name = models.CharField(max_length=50)
genre_slug = models.SlugField('leave this blank, autosaves new slug', max_length=72, unique=True, blank=True, null=True)

def save(self, *args, **kwargs):
if not self.genre:
#Newly created object, so set slug
self.genre_slug = slugify(self.genre_name)

super(Genre, self).save(*args, **kwargs)
def __str__(self):
return self.genre_name

class D100Generator(models.Model):
d_100_id = models.AutoField(primary_key=True)
table_name = models.CharField('table name', max_length=100)
system_id = models.ForeignKey(System, on_delete=models.CASCADE, blank=True, null=True)
genre_id = models.ForeignKey(Genre, on_delete=models.CASCADE)
chart_type = models.CharField('Die used', max_length=15)
chart_instructions = models.TextField('Chart instructions & explanation')
roll_1 = models.TextField('1', blank=True, null=True)
...
roll_110 = models.TextField('110', blank=True, null=True)
table_slug = models.SlugField('leave this blank, autosaves new slug', max_length=72, unique=True, blank=True, null=True)

def save(self, *args, **kwargs):
if not self.d_100_id:
#Newly created object, so set slug
self.table_slug = slugify(self.table_name)

super(D100Generator, self).save(*args, **kwargs)
def __str__(self):
return self.table_name

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)

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>

在 Generators.html 页面上,我收到错误“DoesNotExist at/generators/genre/9

类型匹配查询不存在。”

我希望 URL 能够显示类型_slug,而不是给定 URL 中的主键“流派”。也许我使用了错误的逻辑来关注genre_slug?

最佳答案

关于我的观点.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)

关于mysql - 哪些 Django 查询集的功能相当于需要输入的 MySQL 存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58738550/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com