我正在构建一个 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/