Как я могу перечислить все решения определенного вопроса и как сделать соответствующий URL для него в Django?

У меня есть две модели, Вопрос и Решение. Один вопрос может иметь много решений, но решение может иметь только один вопрос.

Вот они:

models.py

class Question(models.Model):
    question_title = models.CharField(max_length = 100)
    question_description = models.TextField()

    question_tags = models.TextField()
    
    def __str__(self):
        return self.question_title

class Solution(models.Model):
    user_profile = models.ForeignKey(UserProfile, on_delete = models.SET_NULL)
    question_id = models.ForeignKey(Question, on_delete = models.CASCADE, blank = False, null = True)
    solution = models.TextField()
    date_modified = models.DateTimeField(auto_now_add = True)

    def __str__(self):
        return "[SOL] " + self.question_id + "/" + self.user_profile

Вот мой views.py:

class QuestionList(generics.GenericAPIView, mixins.ListModelMixin, mixins.CreateModelMixin):
    # Used to access all questions and adding one
    queryset = Question.objects.all()
    serializer_class = QuestionSerializer
    
    def get(self, request):
        return self.list(request)

    def post(self, request):
        return self.create(request)

class QuestionDetails(generics.GenericAPIView, mixins.RetrieveModelMixin, mixins.UpdateModelMixin,
                      mixins.DestroyModelMixin):

    queryset = Question.objects.all()
    serializer_class = QuestionSerializer

    lookup_field = 'id'

    def get_question(self, id):
        try:
            return Question.objects.get(id = id)
        except Question.DoesNotExist:
            raise Http404

    def get(self, request, id):
        question = self.get_question(id)
        serializer = QuestionSerializer(question)
        return Response(serializer.data, status.HTTP_200_OK)

    def put(self, request, id):
        question = self.get_question(id)
        serializer = QuestionSerializer(question, data = request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status = status.HTTP_201_CREATED)
        return Response(serializer.errors, status = status.HTTP_400_BAD_REQUEST)

    def delete(self, request, id):
        question = self.get_object(id)
        question.delete()
        return Response(status = status.HTTP_204_NO_CONTENT)

class SolutionList(generics.GenericAPIView, mixins.ListModelMixin,mixins.CreateModelMixin):
# Empty because I'm still incredibly confused

Это мой urlpatterns :

urlpatterns = [
    path("questions/", QuestionList.as_view()),
    path("questions/<int:id>/", QuestionDetails.as_view()),
]

Первый - для доступа к списку вопросов, а второй - для доступа к конкретному вопросу. Я хочу, чтобы URL для доступа к списку решений конкретного вопроса выглядел следующим образом:

questions/question_id/solutions/

где question_id - идентификатор конкретного вопроса. Я также хочу, чтобы URL для доступа к конкретному решению конкретного вопроса выглядел следующим образом:

questions/question_id/solutions/solution_id/

где solution_id - идентификатор конкретного решения.

Как мне это сделать?

Помощь приветствуется.

Я не работаю с миксинами, но вот функция для вас...

def show_solution(request, q_id, s_id):
    context = {
        'q' : Question.objects.get(pk=q_id),
        's' : Solution.objects.get(pk = s_id).filter(question_id=question),
    }
    return render (request, 'template.html', context)
Вернуться на верх