python - 不使用<int :pk>构建django详细 View 和 ListView

标签 python django postgresql

我正在构建一个 django 应用程序,用于显示员工及其工资的数据库。它使用 postgres 数据库。我正在努力弄清楚如何在不使用 url 主键的情况下构建 DetailView。我认为使用 slug 可能是解决方案,但我不确定如何实现它,并且在网上搜索也没有太多运气。

我的所有公司列表的 ListView :

class AllCompanies(FormMixin, generic.ListView):
template_name = 'AllCompanies.html'
form_class = SearchForm
model = bigdatabase
queryset = bigdatabase.objects.order_by().values('company').distinct()
context_object_name = 'companies'

示例数据库片段,大数据库:

Company EmployeeName Salary
Alpha   Jim          100000
Alpha   Tim          125000
Beta    Bim          90000

我的 ListView 按预期显示所有唯一的公司名称。但是,我不确定如何继续并构建详细 View 以显示每个独特公司的更多信息。我想显示员工数量、工资中位数等信息。

我通过为员工构建详细 View 来完成类似的操作,但这依赖于在 url 中使用他们的主键,因为每个员工都是唯一的。由于我的数据库中有许多公司的许多条目,我将如何构建一个详细 View 和随附的 url 结构来支持它?

任何有关插入这一进程的建议或指示将不胜感激。

最佳答案

您可以将 slugfield 添加到您的大数据库模型中。尝试使用 autoslugfield 并将其设置为公司名称,例如:

from django_extensions.db.fields import AutoSlugField

class bigdatabase(models.Model): 
company = Models.Charfield()
slug = models.AutoSlugField(populate_from=['company']
......

这可确保您的公司名称将自动翻译以在网址中使用。例如。当公司名称中有空格时,使用 str:company 会将空格翻译为奇怪的字符。在您的网址中使用会将其转换为 -。

命名模型字段 slug 可确保您的详细 View 默认获取 slug 字段。请参阅docs .

您的 View 将类似于:

class CompanyDetailView(DetailView):
model = bigdatabase 
template_name = '#path_to_template'
slug_url_kwarg = 'slug' # I believe this is done correctly by default but in case you change the field name. 

在您的网址中,您可以执行上述操作:

path('company/<slug>', views.CompanyDetailView.as_view())

祝你编码愉快!

关于python - 不使用<int :pk>构建django详细 View 和 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63480439/

相关文章:

python - 过滤时从 Pandas 数据框中获取子字符串

python - Airflow 提供静态 html 目录

python - Tensorflow 模型保存和加载

Google Cloud Run 中的 Django 找不到/云 sql 套接字

PostgreSQL 性能调整和最大连接数(实际上)

postgresql - 计算postgresql中两个对应列之和的方法

python - Pytesseract 不识别小数点

Django 测试装置和内容类型

python - 使用 Mongoengine 进行插入只能从 shell 工作,但不能从 Django View 工作

sql - 姓名姓氏相似度搜索