Я работаю над проектом, когда что-то выплевывает следующую ошибку:
Reverse for 'project-file-delete' with arguments '('',)' not found. 1 pattern(s) tried: ['projects/(?P<pk>[0-9]+)/project\\-file/delete/$']
вот мой основной urlpattern:
urlpatterns = [
path('', welcome_view.home, name='welcome'),
path('projects/', include('projects.urls'))]
urlpattern приложения моего проекта:
urlpatterns = [
path('', ProjectListView.as_view(), name='project-home'),
path('user_project/<str:username>/', UserProjectListView.as_view(), name='user-projects'),
path('<int:pk>/', ProjectDetailView.as_view(), name='project-detail'),
path('new/', ProjectCreateView.as_view(), name='project-create'),
path('<int:pk>/update/', ProjectUpdateView.as_view(), name='project-update'),
path('<int:pk>/delete/', ProjectDeleteView.as_view(), name='project-delete'),
path('<int:pk>/create_base_file/', ProjectFileCreateView.as_view(), name='project-base-file'),
path('<int:pk>/project-file/delete/', ProjectFileDeleteView.as_view(), name='project-file-delete'),
path('<int:pk>/project_file/', views.proj_file_detail, name='project-file-detail'),
]
Определение класса модели моего проекта:
class Project(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
date_created = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('project-detail', kwargs={'pk': self.pk})
class ProjectFile(models.Model):
FILE_TYPE = (
('base', 'Base File'),
('transformed', 'Transformed File'),
('discretized', 'Discretized File'),
('model', 'Model File')
)
file = models.FileField(upload_to='project-files', default=True)
category = models.CharField(max_length = 50, default = 'base', choices = FILE_TYPE)
description = models.TextField(default = 'base file')
project = models.ForeignKey(Project, on_delete=models.CASCADE)
def __str__(self):
return self.description
def get_absolute_url(self):
return reverse('project-detail', kwargs = {'pk': self.project}) #kwargs={ 'project': self.project })
Шаблон, где возникает ошибка:
{% block page_heading %}
<div class="d-sm-flex align-items-center justify-content-between mb-4">
<h1 class="h3 mb-0 text-gray-800">Project's Detail</h1>
</div>
{% endblock page_heading %}
{% block content %}
<div class="jumbotron col-xl-10 col-md-6 mb-1">
<h5>{{ object.name }} </h5>
<img class="img-profile rounded-circle" src="{{ user.profile.image.url }}">
<p> {{ object.author }}</p>
<p> {{ object.date_created|date:"F d, Y" }}</p>
<p> {{ object.description }}</p>
<p> Project File(s):</p>
<table class="table table-hover table-default">
<thead>
<tr>
<th scope="col">Filename</th>
<th scope="col">Classification</th>
</tr>
</thead>
<tbody>
{% for file in project_files %}
<tr class="table-default">
{% if object.author == user %}
<th scope="row"><a href="{% url 'project-file-detail' object.id %}">{{ file.file }} </a></th>
{% else %}
<th scope="row">{{ file.file }}</th>
{% endif %}
<td>{{ file.category }}</td>
<td>
<a class="float-sm-right" href="{% url 'project-file-delete' object.id %}">
Describe File
</a>
</td>
<td>
<a class="float-sm-right" href="{% url 'project-file-delete' object.ProjectFile %}">
<i class="fas fa-fw fa-trash" style="font-size:16px;color:red"></i>
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% if object.author == user %}
<a class="btn btn-outline-primary btn-sm mt-1 mb-1" href="{% url 'project-base-file' object.id %}">NEXT | Upload Base File</a>
<a class="btn btn-outline-secondary btn-sm mt-1 mb-1" href="{% url 'project-update' object.id %}">Update</a>
<a class="btn btn-danger btn-sm mt-1 mb-1 float-sm-right" href="{% url 'project-delete' object.id %}">Delete this project</a>
{% endif%}
</div>
{% endblock content %}
Подробное представление проекта, которое вызывает ошибку:
class ProjectDetailView(DetailView):
model = Project
context_object_name = 'projects'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
file = ProjectFile.objects.filter(project=self.kwargs.get('pk'))
# file = file
context["project_files"] = file
return context
и, наконец, мой файл Удалить представление проекта:
class ProjectFileDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
model = Project
template_name = 'projects/project_file_confirm_delete.html' # template for deletion
success_url ='/projects/' # url after successfull deletion
# Test user permission
def test_func(self):
project = self.get_object()
if self.request.user == project.author:
return True
else:
return False