我正在尝试完成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: 我收到页面错误,说该子项没有任何主题的外键