如何在通用Django CreateView中包含来自另一个模型的对象?

2024-10-03 00:30:58 发布

您现在位置:Python中文网/ 问答频道 /正文

好的,所以我正在尝试在我的createAnswer视图中包含相应的注释当前createAnswer页面的url包含pk Ok和正确的注释,所以我需要通过url中的id获取注释。
我的通用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)


我的网址.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}


Tags: pathfromselfformidurlgetreturn
1条回答
网友
1楼 · 发布于 2024-10-03 00:30:58

我认为您混淆了函数视图和基于类的视图(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参数,请使用自我.kwargs,这样您就可以通过自我.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

相关问题 更多 >