python - 使用基于 @propert 的 attr 作为模型 slug,django 的视图?
问题描述
我正在尝试使用使用@property
我的模型中的装饰器创建的属性作为 django 的 slug 字段DetailsView
,如下所示:
class Province(models.Model):
name = models.CharField(max_length=30)
code = models.CharField(max_length=10)
@property
def slug(self):
return slugify(self.name)
我的网址:
path("map/<slug:slug>", MyView.as_view())
我的观点:
class MyView(DetailView):
template_name="myapp/map.html"
context_object_name = "province"
model = Province
但是在访问页面时出现以下异常:
Cannot resolve keyword 'slug' into field. Choices are: code, id, name
有没有办法解决这个问题,而不使用显式SlugField
?
解决方案
简短的回答:你不能将 slug 存储为@property
从那时起它没有存储在数据库中。
问题是您现在无法在 slug 的数据库端进行过滤,因为它在那里不存在,一个属性只存在于 Django/Python 级别。
因此,slug 应该存储在数据库中。A , 将进行查询,在数据库端DetailView
查找具有给定 slug 的记录。A或其子类之一通常会在字段上添加 a ,因此数据库将创建索引以有效地查找记录。SlugField
db_index=True
如果您不想实现指定 slug 的方法,您可以使用 package.json 中的AutoSlugField
fielddjango-autoslug
。你安装这个:
pip3 install django-autoslug
在您的虚拟环境中。接下来,您可以使用以下命令添加此字段:
from autoslug import AutoSlugField
from django.db import models
class Province(models.Model):
name = models.CharField(max_length=30)
code = models.CharField(max_length=10)
slug = AutoSlugField(populate_from='name')
推荐阅读
- html - 在 iFrame 中嵌入带参数的 URL(Google DataStudio 报告)
- python - nansum 仅当至少一个值不是 nan - numpy
- javascript - Webpack 外部无法在父项目中解析
- gnuplot - 如何设置没有点的图例并在情节中重复?
- elixir - 如何使用结构从关联中选择给定模型的所有字段以及选定字段以避免过度获取
- database - couchdb 显示不同的记录计数与分页?
- ruby-on-rails - 我无法在视图部分显示评论的创建者
- php - 接口依赖注入
- c - 不同类型的指针赋值
- kubernetes - 如何在 Kubeflow 中安排作业?