Как собрать пк модели, которую вы сейчас просматриваете (django)
Эй, я пытаюсь сделать проект вопросов и ответов для django, как мне получить pk вопроса, который я просматриваю прямо сейчас, чтобы отправить ответ? Я уже настроил его так, что url ответа имеет /answer/pk вопроса, но я не знаю, как получить эту информацию, чтобы код знал, где разместить модель, как мне это сделать? Также вот мой код, спасибо!
просмотров:
class AnswerForm(SuccessMessageMixin, CreateView):
template_name = 'forum/answer-question.html'
model = Answer
form_class = AnswerForm
success_message = 'Success!'
def form_valid(self, form, pk=None):
form.instance.question_id = Question.objects.only('id')
form.instance.user = self.request.user
form.save()
return super().form_valid(form)
формы:
class AnswerForm(ModelForm):
class Meta:
model = Answer
fields = ['detail']
exclude = ('user', 'add_time')
Урлы:
from django.urls import path from . import views
urlpatterns = [
path('questions/', views.QuestionsView.as_view(), name='questions'),
path('ask/', views.AskForm.as_view(), name='ask'),
path('answer/', views.AnswerForm.as_view(), name='answer'),
path('answer/<pk>', views.AnswerForm.as_view(), name='answer_with_pk'),
path('question/<pk>', views.QuestionDetailView.as_view(), name='detail'),
path('save-text', views.WriteCommentAnswerView.as_view(), name='save-text'),
path('save-vote', views.SaveVoteView.as_view(), name='save-vote'),
]
модели:
class Answer(VoteModel, models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
detail = models.TextField()
add_time = models.DateTimeField(auto_now_add=True)
def get_absolute_url(self):
return f"/questions/"
def __str__(self):
return self.detail
В AnswerForm вы получаете все параметры url, добавленные к self из-за базового класса DetailedView. В вашем случае "self.pk". Затем вы можете добавить что угодно в контекст для рендеринга html, реализовав get_context_data:
def get_context_data(self, **kwargs):
# Call the base implementation first to get a context
context = super().get_context_data(**kwargs)
# Add in the publisher
context['question_pk'] = self.pk
return context
Смотрите https://docs.djangoproject.com/en/4.0/topics/class-based-views/generic-display/