Список моделей, содержащих внешний ключ, в подробном представлении - PullRequest
0 голосов
/ 19 декабря 2018

Я хотел бы иметь подробное представление Django, которое показывает все модели, содержащие внешний ключ для страницы подробного представления для этого значения внешнего ключа, связанного из представления списка.

Модель ActivityID содержитсписок идентификаторов символов (например, «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 в представлении списка, вы получите:

AttributeError в / catalog / activity / 2429
модуль 'django.db.models' не имеет атрибута '

Есть идеи, что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Как отметил Сергей, вы звоните не тому классу.Но на самом деле весь подход не имеет смысла.Деталь в этом представлении - это активность.Вы не хотите фильтровать действия по Activityid, вы хотите получить действие по ID, а затем получить связанные библиотеки.

Вторая часть этого выполняется activity.library_set.all в шаблоне, ипервая часть - это то, что обычно делает DetailView - так что вам вообще не нужен этот метод get_queryset.Вы должны удалить его.

0 голосов
/ 19 декабря 2018

Вы звоните models модуль вместо вашей модели.Попробуйте:

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