Как я могу перечислить все решения определенного вопроса и как сделать соответствующий 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)