尝试在视图中创建一个包含每个项目的子列表的详细视图。我可以为同一视图上的每个项目创建一个项目

时间:2019-07-04 21:48:00

标签: python django

我正在尝试完成Django项目的此功能。我已经创建了一个列表视图,并且能够单击列表视图上的主题并进入其详细视图。一旦进入该主题的详细视图,就会有与该主题关联的项目列表。在页面顶部,我有一个表单,提交后将创建一个项目,并将其放在同一详细信息视图中项目列表的末尾。每个项目都有一个子项目列表。我试图为每个子项目创建一个提交按钮。因此,当我单击“提交”按钮时,该子项将被添加到创建它的列表的末尾。一切看起来都不错,但是当我尝试创建一个子项目时,却没有为正确的项目创建该子项目。

我希望这样做是因为,任何人都可以向我指出正确的方向吗?

我已经在详细视图中创建了一个列表

对于列表中的每个项目,我创建了一个子列表

对于任何列表中的每个项目,我都试图创建一个新项目,并将其附加在列表的末尾,

我的问题是我可以通过详细视图设置获得项外键。但是我无法让该项目的外键与在其下创建的子项目配对。

Class TopicDetailView(DetailView,View)类:

template_name       =   "topic_detail.html"
item_form           =   ItemForm()
subitem_form        =   SubitemForm()
topic               =   ''
topic_items         =   ''
subitem_item        =   ''
all_arguments       =   Argument.arguments.all()
creation_date       =   datetime.now().strftime("%Y-%m-%d %H:%M")

context = {
            'item_form'         :   item_form,
            'subitem_form'      :   subitem_form,
            'topic_items'       :   topic_items,
            'subitem_item'      :   subitem_item,
            'all_subitems'      :   all_subitems,
            'creation_date'     :   creation_date,
}

def get(self,request,pk,context=context):
    context['topic']            =   Topic.topics.all().get(id=pk)
    context['topic_items']      =   context['topic'].rule_set.all()
    context['user']             =   self.request.user
    return render(request,self.template_name, context=context)

def post(self,request,pk,context=context):
    subitem_form = SubitemForm()
    item_form = ItemForm()
    if request.method=='POST' and 'ItemButton' in request.POST:
        item_form = ItemForm(request.POST)
        if item_form.is_valid():
            print(item_form.cleaned_data)
            Item.items.create_item  (
                **item_form.cleaned_data,
                Topic           =   context['topic'],
                created_by      =   context['user'],
                creation_date   =   context['creation_date']
            )
            TopicDetailView.get(self,request,pk,context=context)
        else:
            print(rule_form.errors)
            TopicDetailView.get(self,request,pk,context=context)
    elif request.method=='POST' and 'SubitemButton' in request.POST:
        subitem_form = SubitemForm(request.POST)
        if subitem_form.is_valid():
            print(subitem_form.cleaned_data)
        for item in context['topic_items']:
            if item.id in request.POST:
                context['subitem_item'] = Item.items.all().get(id=item.id)
                Subitem.subitem.create_subitem   (
                    **subitem_form.cleaned_data,
                    created_by      =   context['user'],
                    Item            =   context['subitem_item']
                )
                TopicDetailView.get(self,request,pk,context=context)
        else:
            print(item_form.errors)
            TopicDetailView.get(self,request,pk,context=context)
    return render(request,self.template_name, context=context)

我试图实现的结果:

我将主题键入表格 我点击提交按钮 使用正确的外键创建主题并将其添加到“详细信息”视图中列表的末尾 (这行得通,因为我可以使用URL中的pk)

我将子项目键入表格 我点击提交按钮 创建子项目并将其添加到在同一“详细信息”视图下创建的子主题列表的末尾 (这不起作用)

我实际上得到的结果:

我将子项目键入表格 我点击提交按钮

结果1: 该子项未创建,因为主题表单留为空白(不应是与其完全不同的表单的一个因素)

结果2: 该子项目已创建,但它的外键是针对最后一个主题的,而不是它在其下创建的主题的

结果3: 我收到页面错误,说该子项没有任何主题的外键

0 个答案:

没有答案