Get_object_or_404 и .get(id=pk) не работают, когда я пытаюсь получить доступ к моей модели в каком-либо представлении
я пытаюсь получить доступ к моей модели, используя оба метода, но один из них не работает в моем представлении. я хочу, чтобы когда пользователь нажимает на {{question.title}} на моей главной странице, он мог видеть все содержимое сообщения в шаблоне vewQuestion. но оба метода не работают в приложении. есть кто-нибудь, кто может помочь мне, пожалуйста.
мои урлы
path('view/<int:pk>/', views.viewQuestion, name='viewQuestion'),
метод обоих
my_list = get_object_or_404(Question, id=pk)
list_of_question = Question.objects.get(id=pk)
урл
<a href="{% url 'viewQuestion' question.id %}" style="text-decoration: none;">
шаблон дома
<div class="container">
<div class="row justify-content-center">
{% for question in list_of_question reversed %}
<div class="col-md-4">
<div class="card my-3">
<div class="card-header">
<p class="card-title">{{question.user}}</p>
</div>
<div class="card-body">
<a href="{% url 'viewQuestion' question.id %}" style="text-decoration:
none;">
<p class="card-title">{{question.title}}</p>
</a>
<p>Category: {{question.category}}</p>
</div>
</div>
</div>
{%endfor%}
</div>
</div>
шаблон viewQuestion
<div class="container">
<div class="row justify-content-center">
<h1>{{question.title}}</h1>
<hr>
</div>
<br>
<h3 style="font-family: arial;">{{question.body}}</h3>
<hr>
<br>
<h5>{{question.user}}</h5>
</div>
взгляды
@login_required(login_url='login')
def index(request):
query = request.GET.get('q', None)
list_of_question = Question.objects.all()
if query is not None:
list_of_question = Question.objects.filter(
Q(title__icontains=query) |
Q(category__icontains=query)
)
context = {'list_of_question':list_of_question}
return render(request, 'index.html', context)
def viewQuestion(request, pk):
my_list = get_object_or_404(Question, id=pk)
list_of_question = Question.objects.get(id=pk)
answers = Answer.objects.filter(post_id=list_of_question)
context = {'list_of_question':list_of_question, 'answers':answers, 'my_list':my_list}
return render(request, 'viewQuestion.html', context)
мои модели
class Question(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=100, blank=False, null=False)
body = models.TextField(blank=False, null=False)
category = models.CharField(max_length=50, blank=False, null=False)
def __str__(self):
return str(self.user)
class Answer(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
answer = models.TextField(blank=False, null=False)
post = models.ForeignKey(Question, on_delete=models.CASCADE)
def __str__(self):
return str(self.user)
В шаблоне viewQuestion вы используете question переменную
Например
{{question.title}},
но вы не передаете его в context в представлении viewQuestion.
Есть только list_of_question, answers и my_list.
Замените клавишу list_of_question на question и она должна работать:
def viewQuestion(request, pk):
my_list = get_object_or_404(Question, id=pk)
question = Question.objects.get(id=pk)
answers = Answer.objects.filter(post_id=list_of_question)
context = {'question':question, 'answers':answers, 'my_list':my_list}
return render(request, 'viewQuestion.html', context)