gpt4 book ai didi

django - Django中的表单内的表单?

转载 作者:行者123 更新时间:2023-12-04 18:16:46 24 4
gpt4 key购买 nike

我一直在查看文档,并认为内联表单集可能是答案。但我并不完全确定。

通常,每当您创建 ModelForm 时,它只会绑定(bind)到相关的模型。但是,如果您想在一个表单中编辑两个模型怎么办?

简而言之,在编辑类时 conversation , 并选择 Deal下拉列表中的类,我也希望能够更改所选交易类的状态(但不是交易名称)。都在同一个表格内。 Django允许吗?

class Deal(models.Model):    
deal_name = models.CharField()
status = models.ForeignKey(DealStatus)

class Conversation(models.Model):
subject = models.CharField()
deal = models.ForeignKey(Deal, blank=True, null=True)

更新 :

我不确定 inline-formssets 是否是答案的原因是以下行为:

查看:
call = get_object_or_404(contact.conversation_set.all(), pk=call_id)
ConversationFormSet = inlineformset_factory(Deal, Conversation)
fset = ConversationFormSet(instance=call)
variables = RequestContext(request, {'formset':fset})
return render_to_response('conversation.html', variables)

模板
{{ formset }}  

我得到的结果不是我所期望的。我得到了三种形式的 session 类,其中第一种被填写(由于编辑和传递实例)。然而 Deal下拉菜单根本没有列出。为什么?

最佳答案

我找到了解决方案,并希望这将有助于将来遇到同样问题的其他人。我最终重新设计了我的模型。

我只是将状态也添加到了我的对话模型中。

class Conversation(models.Model):
subject = models.CharField()
deal = models.ForeignKey(Deal, blank=True, null=True)
status = models.ForeignKey(DealStatus)

在 View 中,我添加了一个自定义保存,如下所示:
if form.is_valid():            
call = form.save(commit=False)
deal = get_object_or_404(Deal.objects.all(), pk=call.deal.id)
deal.status = call.status
deal.save()
call.save()

这很好用。

关于django - Django中的表单内的表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11503358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com