在详细视图中列出包含外键的模型

时间:2018-12-19 19:21:33

标签: django django-views

我希望有一个Django详细视图,该视图显示所有包含从列表视图链接的该外键值的详细视图页面的外键的模型。

模型ActivityID包含一个字符ID列表(例如'F1088HW')。还有其他几个模型,每个模型都包含存储设施的内容,并且每个项目都有一个ActivityID。因此,例如,当单击F1088HW时,详细信息页面应显示所有具有该ActivityID内容的设施。

到目前为止,基于其他各种SO问题,我有以下观点:

class ActivityDetailView(generic.DetailView):
    model = ActivityID
    # context_object_name = 'library_set'  
    # Changed to 'activity' based on comments below
    # context_object_name = 'ativity'

    def get_queryset(self):
        pk = self.kwargs['pk']
        return models.objects.filter(activityid = pk)

还有ActivityID_detail.html

{% extends "base_generic.html" %}
{% block content %}
<h1>Field Activity ID: {{ activity }} </h1>
<div style="margin-left:20px;margin-top:20px">
<h4>Libraries</h4>
<dl>
{% for library in activity.library_set.all %}
  <dt><a href="{% url 'activity-detail' library.pk %}">{{library}}</a> ({{library.library_set.all.count}})</dt>
{% endfor %}
</dl>
</div>
{% endblock %}

urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('activities/', views.ActivityIDsView.as_view(), name='activities'),
    path('activities/<int:pk>', views.ActivityDetailView.as_view(), name='activity-detail'),
]

但是在列表视图中单击ActivityID会返回:

  / plog / activities / 2429处的

AttributeError
  模块'django.db.models'   没有属性“对象”

知道我在做什么错吗?

2 个答案:

答案 0 :(得分:1)

您正在调用models模块而不是模型。 试试:

return self.model.objects.filter(id=pk)

答案 1 :(得分:0)

正如谢尔盖(Sergey)所指出的那样,您输入的是错误的课程。但是实际上,整个方法没有任何意义。该视图中的细节是活动。您不想按activityid过滤活动,而是要按ID获取活动,然后获取相关库。

第二部分由模板中的activity.library_set.all完成,第一部分是DetailView通常会执行的操作-因此您根本不需要该get_queryset方法。您应该将其删除。