我正在处理一个正在研究的Django项目。我现在有两个应用程序,需要相当多的重叠。我真的只开始了第二个项目(名为workflow
),我正在尝试为该应用程序创建我的第一个表单。我的第一个应用程序叫做po
。在workflow
应用程序中,我有一个名为WorkflowObject
的类,它(现在)只有一个属性 - PurchaseOrder
的外键,在{{1}中定义}。我已使用po/models.py
导入该类。
我要做的是拥有一个用户创建新from po.models import PurchaseOrder
的页面。这工作正常(它与我在PurchaseOrder
应用程序中使用的形式相同),然后使用该类的实例创建PurchaseOrder
。现在的问题是,我收到错误:WorkflowObject
。我真的不知道从哪里开始。它工作正常(允许我创建一个新的ValueError: Cannot create form field for 'purchase' yet, because its related model 'PurchaseOrder' has not been loaded yet
并转发到网址中包含其主键的网址),直到我添加了应该允许我创建新PurchaseOrder
的视图。我将把这个具体观点放在这里:
WorkflowObject
似乎导致错误的代码行(或者至少是回溯中显示的行之一)是:
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render, get_object_or_404
from django_tables2 import RequestConfig
from po.models import PurchaseOrderForm, PurchaseOrder
from workflow.models import POObject, WorkflowForm
def new2(request, number):
po=PurcchaseOrder.objects.get(pk=number)
if request.method == 'POST':
form = WorkflowForm(request.POST)
if form.is_valid():
new_flow = form.save()
return HttpResponse('Good')
else:
return render(request, 'new-workflow.html', {'form': form, 'purchase': po})
else:
form = WorkflowForm()
return render(request, 'new-workflow.html', {'form': form, 'purchase': po})
编辑:
我似乎犯了一个非常的noob错误,并在class WorkflowForm(ModelForm):
purchase = forms.ModelChoiceField(queryset = PurchaseOrder.objects.all())
的定义中加入了括号,也就是说,我曾说过WorkflowObject
,而不是purchase=models.ForeignKey('PurchaseOrder')
答案 0 :(得分:0)
首先,您可以尝试将代码缩减为:
def new2(request, number): po=PurcchaseOrder.objects.get(pk=number) form = WorkflowForm(request.POST or None) if form.is_valid(): new_flow = form.save() return HttpResponse('Good') else: return render(request, 'new-workflow.html', {'form': form, 'purchase': po})
其次,我不明白为什么你在其他情况下写了forms.ModelChoiceField(...)
和另一个案例ModelForm
实例forms.ModelForm
?
答案 1 :(得分:0)
似乎您的WorkflowForm没有什么特别之处,因此您可以按如下方式定义它:
class WorkflowForm(ModelForm):
class Meta:
model = WorkflowObject
将自动创建关系字段。
答案 2 :(得分:0)
我遇到了类似的问题,并且能够通过在models.py文件中的所有类模型下面声明所有的modelForm类来解决这个问题。这样,模型类在modelForm类之前加载。