python - 在 Django 中创建基于多个 SlugField 的路径
问题描述
我有一个基于创建锦标赛和在其中嵌套特定对象的 Django 项目。例如,每场比赛都有多个委员会。当有人创建锦标赛时,我允许他们创建一个带有SlugField
. 我的代码(到目前为止)如下:
模型.py
from django.db import models
from django.utils.text import slugify
class Tournament(models.Model):
name = models.CharField(max_length=50)
slug = models.SlugField(max_length=50, unique=True)
def _get_unique_slug(self):
'''
In this method a unique slug is created
'''
slug = slugify(self.name)
unique_slug = slug
num = 1
while Tournament.objects.filter(slug=unique_slug).exists():
unique_slug = '{}-{}'.format(slug, num)
num += 1
return unique_slug
def save(self, *args, **kwargs):
if not self.slug:
self.slug = self._get_unique_slug()
super().save(*args, **kwargs)
class Committee(models.Model):
name = models.CharField(max_length=100)
belongsTo = models.ForeignKey(Tournament, blank=True, null=True)
slug = models.SlugField(max_length=50, unique=True)
def _get_unique_slug(self):
'''
In this method a unique slug is created
'''
slug = slugify(self.name)
unique_slug = slug
num = 1
while Committee.objects.filter(slug=unique_slug).exists():
unique_slug = '{}-{}'.format(slug, num)
num += 1
return unique_slug
def save(self, *args, **kwargs):
if not self.slug:
self.slug = self._get_unique_slug()
super().save(*args, **kwargs)
视图.py
from django.shortcuts import render, get_object_or_404
from .models import Tournament, Committee
def tournament_detail_view(request, slug):
tournament = get_object_or_404(Tournament, slug=slug)
return render(request, 'tournament/detail.html', {'tournament': tournament})
def committee_detail_view(request, slug):
committee = get_object_or_404(Committee, slug=slug)
return render(request, 'committee/detail.html', {'committee': committee})
网址.py
from . import views
from django.urls import path
app_name = 'tournament'
urlpatterns = [
path('<slug:slug>/', views.tournament_detail_view),
]
我的问题涉及urls.py
。如果用户创建了一个名为“Zavala”的锦标赛,他们目前可以访问该网站example.com/zavala
。但是,如果他们在上述锦标赛下创建了一个名为“Cayde”的委员会,他们将无法访问该委员会example.com/zavala/cayde
。问题是两个子网址都是蛞蝓,我不确定 Django 是否可以使用它。有没有办法创建一个允许用户去委员会的路径?我想过创建一个函数来测试锦标赛是否存在,但不确定具体如何。有小费吗?我需要的只是一个可行的解决方案。
解决方案
我不知道你为什么认为你不能有两个蛞蝓。你可以:
urlpatterns = [
path('<slug:slug>/', views.tournament_detail_view),
path('<slug:tournament_slug>/<slug:committee_slug>/', views. committee_detail_view),
]
现在您的 Committee_detail_view 变为:
def committee_detail_view(request, tournament_slug, committee_slug):
committee = get_object_or_404(Committee, slug=committee_slug, belongsTo__slug=tournament_slug)
return render(request, 'committee/detail.html', {'committee': committee})
推荐阅读
- excel - 在表单上从 Excel 工作表的单元格创建多个标签
- javascript - 了解javascript语句的使用
- flutter - 如何在flutter web-view app中保存登录信息,这样就不需要每次都登录了
- google-compute-engine - 无法连接 Google Compute Engine
- c++ - 在 QTreeWidget 中排序时调试断言(无效的比较器)
- python - Python 代码不会更改我的跟踪数据库
- android - 无法在颤振应用程序的 avd 管理器中启动 AVD
- mysql - findAll 返回空列表
- flutter - 通过 google_sign_in Flutter 刷新令牌获取新令牌
- python - 安装 pythonnet 时选项未识别错误