Django将一个外​​键从ListView传递给Detailview

时间:2017-03-07 03:50:11

标签: python django-models sqlite django-templates django-views

我不太了解Django中的观点。我的网站将有一张桌子上有不同的工作或负荷。这称为负载板。这引用了一个名为Loadboard_table的数据库表。 Loadboard_table包含数据库中Company_table的外键。此数据库表包含分配了此作业/负载的公司以及公司的其他信息。

目标是让用户点击装载板上的任何一行,这会将用户带到公司的“详细信息”页面。我在下面的代码中展示了一个简洁的部分,以避免问题膨胀。

索引

上的表行项目
<!-- this is where I grab my Company table foreign key by clicking on one of the loadboard items -->
<td>
 <a href="{% url 'loadboard:detail' item.CompanyName_id %}">   {{item.CompanyName}}</a>
</td>

urls.py

urlpatterns = [
# /loadboard/
url(r'^$', views.IndexView.as_view(), name='index'),

# /loadboard/71/
#note this is where I am trying to pass the foreign key to
url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='detail'),
]

views.py

from django.views import generic
from .models import Company_table, Loadboard_table


class IndexView(generic.ListView):
    template_name = 'loadboard/index.html' 
    context_object_name = 'all_loadboard' 

    def get_queryset(self):
        return Loadboard_table.objects.all() 

class DetailView(generic.DetailView):
    model = Company_table
    template_name = 'loadboard/detail.html'

detail.html

<!-- I want this detail page to show the Company that the loadboard's foreign key references -->
<head>
    <title>{% block title %}{{Company_table.CompanyName}}'s loadboard{% endblock %}</title>
</head>

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我找到了一种在不使用DetailView类的情况下达到目标的方法。我只是创建了一个处理HTTP请求的函数,并从url中获取了CompanyId。我认为DetailsView类用于更具体的情况。

用户点击:

<td>
<a href="{% url 'loadboard:detail' item.CompanyName_id %}">{{item.CompanyName}}</a>
</td>

然后它在urls.py上触发此URL模式:

url(r'^([0-9]+)/$', views.ViewCompanyDetails, name='detail')

使用views.py上的函数:

def ViewCompanyDetails(request, CompanyId):
    CompanyObject = Company_table.objects.get(id = CompanyId)
    context = {'Company': CompanyObject}
    return render(request, 'loadboard/detail.html', context)

这实现了我的目标,即尝试从用户点击表格的地方传递公司ID,并将其一直传递到视图页面并获取该HTML页面。

我可能对通用模型中的DetailsView类错了,它对主键太具体了,但有人可以纠正我。