Просмотр не возвращает идентификатор
У меня есть представление, которое требует предоставления двух args
. Project_id
и Questionnaire_ID
Существует Project
и Questionnaire
модель.
class Questionnaire(models.Model):
title = models.CharField(max_length=50, blank=False, unique=True)
class Project(models.Model):
project_name = models.CharField(max_length=50, blank=False, unique=True)
project_website = models.URLField(max_length=50, blank=True)
project_description = models.TextField(blank=True)
У меня есть страница с деталями проекта, которая, по сути, является просто целевой страницей проекта, и оттуда у меня есть ссылка на анкету.
связь формируется через For
петлю
{% for item in questionnaire %}
<a class="dropdown-item" href="{% url 'questions' project.id questionnaire.id %}?next={{ request.path|urlencode }}">Questionnaire</a>
{% endfor %}
и мой url conf - path('questions/<int:project_id>/<int:questionnaire_id>', view=add_fundamental_answers_view, name="questions"),
но когда я загружаю страницу project_details, я получаю ошибку
Reverse for 'questions' with arguments '(1, '')' not found. 1 pattern(s) tried: ['questions/(?P<project_id>[0-9]+)/(?P<questionnaire_id>[0-9]+)$']
Итак, похоже, что идентификатор анкеты не вставляется, но я не уверен, почему?
def add_fundamental_answers_view(request, project_id, questionnaire_id):
project = get_object_or_404(Project, pk=project_id)
questionnaire = Question.objects.filter(questionnaire_id=questionnaire_id)
next = request.POST.get('next', '/')
if request.method =='POST':
formset = AnswersForm()(request.POST)
if formset.is_valid():
answer = formset.save(commit=False)
answer.project_name = project
answer.save()
return HttpResponseRedirect(next)
else:
form = AnswersForm()
return render(request, 'pages/formset.html', {'project': project, "form": form,'questionnaire':questionnaire})
Есть идеи, где я ошибаюсь?
Спасибо
Если вы видите ошибку, она говорит : with arguments '(1, '')'
Первый аргумент - 1
, второй - None/Empty
.
Но ваш url ожидает 2 аргумента
path('questions/<int:project_id>/<int:questionnaire_id>'...)
Вам необходимо изменить :
{% for item in questionnaire %}
<a class="dropdown-item" href="{% url 'questions' project.id questionnaire.id %}?next={{ request.path|urlencode }}">Questionnaire</a>
{% endfor %}
К этому
{% for item in questionnaire %}
<a class="dropdown-item" href="{% url 'questions' project.id item.id %}?next={{ request.path|urlencode }}">Questionnaire</a>
{% endfor %}
вместо questionnaire.id
используйте item.id
.
Questionnaire - это queryset, вместо этого вам нужен id экземпляра.