В моем приложении для обслуживания есть шесть моделей. Я включу только 2 из моделей, которые имеют отношение к этому вопросу. Существует список оборудования (Listview), который отображается правильно. Однако у меня возникла проблема при создании DetailView для каждого оборудования. Когда я перехожу к http://127.0.0.1:8000/maintenance/equipments/1, он должен отображать все экземпляры оборудования (детали), относящиеся к оборудованию 1, но он отображает страницу со списком оборудования, то есть http://127.0.0.1:8000/maintenance/equipments/.
models.py
from django.db import models
class Equipment(models.Model):
"""
Model representing an Equipment (but not a specific type of equipment).
"""
title = models.CharField(max_length=200)
physicist = models.ForeignKey('Physicist', null=True, help_text= 'add information about the physicist')
technician = models.ForeignKey('Technician', null=True, help_text= 'add information about the technician')
# Physicist as a string rather than object because it hasn't been declared yet in the file.
features = models.TextField(max_length=1000, help_text='Enter a brief description of the features of the equipment')
machine_number = models.CharField('Number', max_length=30, null=True, help_text='Enter the Equipment number')
specialty = models.ForeignKey(Specialty, null=True, help_text='Select a specialty for an equipment')
# Specialty class has already been defined so we can specify the object above.
assigned_technician = models.CharField(max_length=50, null= True, blank=True)
#This is for the Technician who the repair of the Equipment is assigned to.
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('equipment-detail', args=[str(self.id)])
def display_specialty(self):
return ', '.join([ specialty.name for specialty in self.specialty.all()[:3] ])
display_specialty.short_description = 'Specialty'
class Meta:
ordering = ['-id']
class EquipmentInstance(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, help_text="Unique ID for this particular equipment across the entire database")
equipment = models.ForeignKey('Equipment', on_delete=models.SET_NULL, null=True)
imprint = models.CharField(max_length=200)
due_date = models.DateField(null=True, blank=True)
delegate = models.ForeignKey('Physicist', on_delete=models.SET_NULL, null=True, blank=True)
def is_overdue(self):
if self.due_date and date.today() > self.due_date:
return True
return False
MAINTENANCE_STATUS = (
('p', 'Past Maintenance'),
('o', 'On Maintenance'),
('a', 'Available'),
('r', 'Reserved'),
)
status = models.CharField(max_length=1, choices = MAINTENANCE_STATUS, blank=True, default='m', help_text='Equipment availability')
class Meta:
ordering = ["due_date"]
permissions = (("can_mark_maintained", "Set equipment as maintained"),)
def __str__(self):
"""
String for representing the Model object
"""
return '{0} ({1})'.format(self.id,self.equipment.title)
содержание дорог / urls.py
from django.conf.urls import url
from qatrack.maintenance import views
from qatrack.maintenance import models
urlpatterns = [
url(r'^$', views.MDashboard, name='m_dash'),
url(r'^equipments/$', views.EquipmentListView.as_view(), name='equipments'),
url(r'^equipment(?P<pk>\d+)/$', views.EquipmentDetailView.as_view(), name='equipment-detail'),
]
views.py
from django.shortcuts import render
from django.views.generic import DetailView, ListView
from qatrack.maintenance import models
class EquipmentListView(ListView):
template_name = 'maintenance/equipment_list.html'
def get_queryset(self):
return models.Equipment.objects.all()
paginate_by = 10
class EquipmentDetailView(DetailView):
model = models.Equipment
template_name = 'maintenance/equipment_detail.html'
context_object_name = 'equipment'
equipment_list.html
{% extends "maintenance/m_base.html" %}
{% block body %}
<div class="row">
<div class="col-md-12">
<div class="box">
<h1>Equipment List</h1>
{% if equipment_list %}
<ul>
{% for equipment in equipment_list %}
<li>
<a href="{{ equipment.get_absolute_url }}">{{ equipment.title }}</a> ({{equipment.physicist}}, {{equipment.technician}})
</li>
{% endfor %}
</ul>
{% else %}
<p>There are no equipments in the database.</p>
{% endif %}
</div>
</div>
</div>
{% endblock body %}
equipment_detail.html
{% extends "maintenance/m_base.html" %}
{% block title %}Equipment Details{% endblock %}
{% block body %}
<h1>Title: {{ equipment.title }}</h1>
<h2>Machine Detail</h2>
<p><strong>Physicist:</strong> <a href="">{{ equipment.physicist }}</a></p> <!-- physicist detail link not yet defined -->
<p><strong>Technician:</strong> <a href="">{{ equipment.technician }}</a></p> <!-- technician detail link not yet defined -->
<p><strong>Features:</strong> {{ equipment.features }}</p>
<p><strong>Machine_number:</strong> {{ equipment.machine_number }}</p>
<p><strong>Specialty:</strong> {% for specialty in equipment.specialty.all %} {{ specialty }}{% if not forloop.last %}, {% endif %}{% endfor %}</p>
{% for type in equipment.equipmentinstance_set.all %}
<hr>
<p class="{% if type.status == 'a' %}text-success{% elif type.status == 'm' %}text-danger{% else %}text-warning{% endif %}">{{ type.get_status_display }}</p>
{% if type.status != 'a' %}<p><strong>Due to be maintained:</strong> {{type.due_date}}</p>{% endif %}
<p><strong>Imprint:</strong> {{type.imprint}}</p>
<p class="text-muted"><strong>Id:</strong> {{type.id}}</p>
{% endfor %}
</div>
{% endblock body %}
urls.py
from django.conf import settings
from django.conf.urls import include, url
from django.conf.urls.static import static
from django.views.generic.base import TemplateView, RedirectView
from django.contrib.staticfiles.templatetags.staticfiles import static as static_url
from django.contrib import admin
from qatrack.maintenance.views import get_data
admin.autodiscover()
urlpatterns = [
url(r'^$', TemplateView.as_view(template_name="homepage.html"), name="home"),
url(r'^accounts/', include('qatrack.accounts.urls')),
url(r'^qa/', include('qatrack.qa.urls')),
url(r'^servicelog/', include('qatrack.service_log.urls')),
url(r'^parts/', include('qatrack.parts.urls')),
url(r'^units/', include('qatrack.units.urls')),
url(r'^issues/', include('qatrack.issue_tracker.urls')),
url(r'^maintenance/', include('qatrack.maintenance.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Я прошел через множество вопросов, подобных этому, и применил их, но все еще не могу заставить работать DetailView. Я буду очень признателен за любую помощь. Благодарю. После внесения изменений я обнаружил эту ошибку трассировки
Внутренняя ошибка сервера: / maintenance / equipment1 / Traceback (самая последняя
последний звонок): File
"/Home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/urls/base.py",
линия 77, в обратном направлении
extra, resolver = resolver.namespace_dict [ns] KeyError: 'equipments'
Во время обработки вышеуказанного исключения произошло другое исключение:
Traceback (последний вызов был последним): File
"/Home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/core/handlers/exception.py",
линия 41, во внутренней
response = get_response (запрос) Файл "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/core/handlers/base.py",
строка 217, в _get_response
response = self.process_exception_by_middleware (e, запрос) Файл "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/core/handlers/base.py",
строка 215, в _get_response
response = response.render () Файл "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/template/response.py",
строка 107, в рендере
self.content = self.rendered_content File "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/template/response.py",
строка 84, в rendered_content
content = template.render (context, self._request) Файл "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/template/backends/django.py",
строка 66, в рендере
вернуть файл self.template.render (context) "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/template/base.py",
строка 207, в рендере
вернуть файл self._render (context) "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/test/utils.py",
строка 107, в Instrumented_test_render
вернуть файл self.nodelist.render (context) "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/template/base.py",
строка 990, в рендере
bit = node.render_annotated (context) Файл "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/template/base.py",
строка 957, в render_annotated
вернуть файл self.render (context) "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/template/loader_tags.py",
строка 177, в рендере
вернуть файл compiled_parent._render (context) "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/test/utils.py",
строка 107, в Instrumented_test_render
вернуть файл self.nodelist.render (context) "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/template/base.py",
строка 990, в рендере
bit = node.render_annotated (context) Файл "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/template/base.py",
строка 957, в render_annotated
вернуть файл self.render (context) "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/template/loader_tags.py",
строка 177, в рендере
вернуть файл compiled_parent._render (context) "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/test/utils.py",строка 107, в Instrumented_test_render
вернуть файл self.nodelist.render (context) "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/template/base.py",
строка 990, в рендере
bit = node.render_annotated (context) Файл "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/template/base.py",
строка 957, в render_annotated
вернуть файл self.render (context) "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/template/loader_tags.py",
строка 72, в рендере
result = block.nodelist.render (context) Файл "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/template/base.py",
строка 990, в рендере
bit = node.render_annotated (context) Файл "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/template/base.py",
строка 957, в render_annotated
вернуть файл self.render (context) "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/template/defaulttags.py",
строка 322, в рендере
вернуть файл nodelist.render (context) "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/template/base.py",
строка 990, в рендере
bit = node.render_annotated (context) Файл "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/template/base.py",
строка 957, в render_annotated
вернуть файл self.render (context) "/home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/template/defaulttags.py",
строка 458, в рендере
url = reverse (view_name, args = args, kwargs = kwargs, current_app = current_app) Файл
"/Home/blesjoe1/venvs/qatrack3/lib/python3.5/site-packages/django/urls/base.py",
линия 87, в обратном порядке
поднять NoReverseMatch («% s не является зарегистрированным пространством имен» ключ%) django.urls.exceptions.NoReverseMatch: «equipments» не является
зарегистрированное пространство имен [14 мая / 2018 16:05:33] "GET
/ обслуживание / оборудование1 / HTTP / 1.1 "500 215728