Как включить объект из другой модели в общий Django CreateView? - PullRequest
0 голосов
/ 14 марта 2019

Хорошо, поэтому я пытаюсь включить соответствующий комментарий в свой createAnswer View. В настоящее время URL страницы createAnswer содержит pk ok правильный комментарий, поэтому мне нужно получить комментарий по идентификатору в URL.
Мой общийCreateView выглядит следующим образом:

class createAnswer(CreateView):
   model = Answer
   fields = ['content']
   def getComment(self, request):
    ???


   comment = getComment()

    def get_success_url(self):
       this_path = self.request.get_full_path()
       path_list = this_path.split('/')
       def get_comment_id(self):
           for i in range(len(path_list)):
               if path_list[i].isdigit():
                   return path_list[i]
       return '/blogcontact/comment/'+ get_comment_id(self)
   def form_valid(self,form):
    this_path = self.request.get_full_path()
    path_list = this_path.split('/')
    def get_comment_id(self):
        for i in range(len(path_list)):
            if path_list[i].isdigit():
                return path_list[i]

    form.instance.author = self.request.user
    form.instance.comment = Comment.objects.get(id=get_comment_id(self))
    return super().form_valid(form)


Мой Urls.py выглядит следующим образом:

from django.urls import path
from . import views
from .views import createAnswer

urlpatterns = [
   path('contact/comment/<int:pk>/newanswer', createAnswer.as_view(), 
   name='answer-create')
]<br>

Я хотел бы сохранить объект Comment в переменной, поэтому яМожно использовать его в HTML-шаблоне, как это {{comment}}

1 Ответ

0 голосов
/ 14 марта 2019

Я думаю, что вы путаете представления функций и представления на основе классов (CBV) и никогда не импортируете запрос, это просто параметр, который получают ваши представления.

В представлении функций вы выполняетеследующее:

def my_view(request):
    if request.method == 'POST':
        # do some stuff

Для CBV каждый метод является функцией:

from django.views.generic.edit import CreateView


class MyView(CreateView):
    model = Answer
    fields = ['content']

    def get(self, request):
        # do some stuff

    def post(self, request):
        # do some stuff

РЕДАКТИРОВАТЬ: для доступа к параметрам URL в представлениях на основе классов используйте self.kwargs, поэтому вы получите доступ к комментариюpk, выполнив self.kwargs ['pk'].Теперь вам просто нужно получить комментарий и добавить его к данным контекста:

class CreateAnswer(CreateView):
    model = Answer
    fields = ['content']

    def get_context_data(self, **kwargs):
        kwargs['comment'] = Comment.objects.get(pk=self.kwargs['pk'])
        return super().get_context_data(**kwargs)

    def form_valid(self, form):
        # do some stuff
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...