Просмотр не возвращает идентификатор

У меня есть представление, которое требует предоставления двух 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 экземпляра.

Вернуться на верх