Я новичок в django и пытаюсь понять отношения внешнего ключа и как получить доступ к информации БД, связанной с другим. Я использую Django 2.0.
Я получаю сообщение об ошибке: Revserse для 'files' с аргументами '(' ',)' nout found. 1 шаблон (ы) пробовал:
Traceback:
File "/home/travis/anaconda3/envs/MyDjangoMysqlEnv/lib/python3.6/site-
packages/django/core/handlers/exception.py" in inner
35. response = get_response(request)
File "/home/travis/anaconda3/envs/MyDjangoMysqlEnv/lib/python3.6/site-
packages/django/core/handlers/base.py" in _get_response
128. response = self.process_exception_by_middleware(e,
request)
File "/home/travis/anaconda3/envs/MyDjangoMysqlEnv/lib/python3.6/site-
packages/django/core/handlers/base.py" in _get_response
126. response = wrapped_callback(request,
*callback_args, **callback_kwargs)
File "/home/travis/atom/My_Django_stuff/ixia_results/results/views.py" in
files
30. return render(request, 'results/results_files.html', context=
{'directory':directory})
File "/home/travis/anaconda3/envs/MyDjangoMysqlEnv/lib/python3.6/site-
packages/django/shortcuts.py" in render
36. content = loader.render_to_string(template_name, context,
request, using=using)
File "/home/travis/anaconda3/envs/MyDjangoMysqlEnv/lib/python3.6/site-
packages/django/template/loader.py" in render_to_string
62. return template.render(context, request)
File "/home/travis/anaconda3/envs/MyDjangoMysqlEnv/lib/python3.6/site-
packages/django/template/backends/django.py" in render
61. return self.template.render(context)
File "/home/travis/anaconda3/envs/MyDjangoMysqlEnv/lib/python3.6/site-
packages/django/template/base.py" in render
175. return self._render(context)
File "/home/travis/anaconda3/envs/MyDjangoMysqlEnv/lib/python3.6/site-
packages/django/template/base.py" in _render
167. return self.nodelist.render(context)
File "/home/travis/anaconda3/envs/MyDjangoMysqlEnv/lib/python3.6/site-
packages/django/template/base.py" in render
943. bit = node.render_annotated(context)
File "/home/travis/anaconda3/envs/MyDjangoMysqlEnv/lib/python3.6/site-
packages/django/template/base.py" in render_annotated
910. return self.render(context)
File "/home/travis/anaconda3/envs/MyDjangoMysqlEnv/lib/python3.6/site-
packages/django/template/loader_tags.py" in render
155. return compiled_parent._render(context)
File "/home/travis/anaconda3/envs/MyDjangoMysqlEnv/lib/python3.6/site-
packages/django/template/base.py" in _render
167. return self.nodelist.render(context)
File "/home/travis/anaconda3/envs/MyDjangoMysqlEnv/lib/python3.6/site-
packages/django/template/base.py" in render
943. bit = node.render_annotated(context)
File "/home/travis/anaconda3/envs/MyDjangoMysqlEnv/lib/python3.6/site-
packages/django/template/base.py" in render_annotated
910. return self.render(context)
File "/home/travis/anaconda3/envs/MyDjangoMysqlEnv/lib/python3.6/site-
packages/django/template/loader_tags.py" in render
67. result = block.nodelist.render(context)
File "/home/travis/anaconda3/envs/MyDjangoMysqlEnv/lib/python3.6/site-
packages/django/template/base.py" in render
943. bit = node.render_annotated(context)
File "/home/travis/anaconda3/envs/MyDjangoMysqlEnv/lib/python3.6/site-
packages/django/template/base.py" in render_annotated
910. return self.render(context)
File "/home/travis/anaconda3/envs/MyDjangoMysqlEnv/lib/python3.6/site-
packages/django/template/defaulttags.py" in render
447. url = reverse(view_name, args=args, kwargs=kwargs,
current_app=current_app)
File "/home/travis/anaconda3/envs/MyDjangoMysqlEnv/lib/python3.6/site-
packages/django/urls/base.py" in reverse
88. return iri_to_uri(resolver._reverse_with_prefix(view, prefix,
*args, **kwargs))
File "/home/travis/anaconda3/envs/MyDjangoMysqlEnv/lib/python3.6/site-
packages/django/urls/resolvers.py" in _reverse_with_prefix
632. raise NoReverseMatch(msg)
Exception Type: NoReverseMatch at /1/files/
Exception Value: Reverse for 'files' with arguments '('',)' not found. 1
pattern(s) tried: ['(?P<dir_pk>[^/]+)\\/files\\/$']
urls.py:
from results import views
app_name = 'results'
urlpatterns = [
path('', views.index, name='index'),
path('<dir_pk>/files/', views.files, name='files'),
path('results/<pk>/files/data/', views.data, name='data'),
]
views.py:
from django.shortcuts import render, HttpResponse, get_object_or_404,
redirect
from django.contrib.auth import authenticate, login, logout
from django.contrib import messages
from django.http import HttpResponseRedirect
from django.urls import reverse
from django.contrib.auth.decorators import login_required
from ixLoad_app.ixiapi import create_results_dir_db
from results.models import Directory, Files, Data
def index(request):
if request.POST.get('import'):
print('I made it here')
return redirect('results:index')
else:
result = Directory.objects.all()
print('I am here')
return render(request, 'results/index.html', context={'result':
result})
def files(request, dir_pk):
directory = get_object_or_404(Directory, pk=dir_pk)
#result = Files.objects.get(pk=pk)
print('directory id :', dir_pk, directory)
return render(request, 'results/results_files.html', context=
{'directory':directory})
models.py:
from django.db import models
class Directory(models.Model):
name = models.CharField(max_length=100, default='foobar', unique=True)
results_path = models.CharField(max_length=254, default='foobar',
null=True)
date_field = models.DateField(max_length=100, default=None, null=True)
class Meta:
verbose_name_plural = 'directory'
ordering = ['date_field']
def __str__(self):
return self.name
class Files(models.Model):
csv_filename = models.CharField(max_length=100, default="foobar")
directory = models.ForeignKey(Directory, on_delete=models.CASCADE,
related_name='files')
class Meta:
verbose_name_plural = 'files'
ordering = ['csv_filename']
def __str__(self):
return self.csv_filename
index.html:
<!DOCTYPE html>
{% extends "base.html" %}
{% block body_block %}
<br>
<h5>{{ info|cut:'passing' }}</h5><br>
<div class="container">
{% if result %}
<form method="POST">
{% csrf_token %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
<div class="mb-4">
<input type="submit" value="Update Results"
name="update" id="update_submit" class="btn btn-
primary">
</div>
</form>
<table class="table table-hover">
<thead class="thead-dark">
<tr>
<th scope="col">Date</th>
<th scope="col">ID</th>
<th scope="col"><div class="text-center">Results
Directory</div></th>
</tr>
</thead>
{% for dir in result %}
<tbody>
<tr class="">
<td>{{ dir.date_field }}</td>
<td>{{ dir.id }}</td>
<td>
<a href="{% url 'results:files' dir.pk %}">
<div class="text-center">{{ dir.name }}
</div>
</a>
</td>
</tr>
</tbody>
{% endfor %}
</table>
{% else %}
<form method="POST">
{% csrf_token %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
<div class="mb-4">
<input type="submit" value="Import Results"
name="import" id="import_submit" class="btn btn-
primary">
</div>
</form>
{% endif %}
</div>
{% endblock %}
results_files.html:
<!DOCTYPE html>
{% extends "base.html" %}
{% block breadcrumb %}
<li class="breadcrumb-item"><a href="{% url 'results:index' %}">Results Directory</a></li>
<li class="breadcrumb-item"><a href="{% url 'results:files' dir.pk %}">Result Files</a></li>
<li class="breadcrumb-item active">{{ results.csv_filename }}</li>
{% endblock %}
{% block body_block %}
<div class="container">
<table class="table table-hover">
<thead class="thead-dark">
<tr>
<th scope="col">Directory</th>
<th scope="col"><div class="">Files</div></th>
</tr>
</thead>
{% for file in directory.files.all %}
<tbody>
<tr class="">
<td>{{ file.directory.name }}</td>
<td>
<a href="{% url 'data' file.pk %}">
<div class="">{{ file.csv_filename }}</div>
</a>
</td>
</tr>
</tbody>
{% endfor %}
</table>
</div>
Я просмотрел много одинаковых вопросов, но так и не нашел решения своей проблемы. Я уверен, что это может быть что-то простое, но потратил много часов, может быть, кто-то может увидеть что-то очевидное, я делаю неправильно.