我正在做的一个Django项目有点麻烦。我现在有两个应用程序,它们需要一些重叠。我实际上只开始了第二个项目(称为workflow
),我正试图为该应用程序制作第一个表单。我的第一个应用程序叫做po
。在workflow
应用程序中,我有一个名为WorkflowObject
的类,该类(目前)只有一个属性——在po/models.py
中定义的PurchaseOrder
的外键。我用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
,并将其主键转发到url),直到我添加了一个视图,该视图允许我创建一个新的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})
似乎导致错误的代码行(或者至少是回溯中显示的一行)是:
class WorkflowForm(ModelForm):
purchase = forms.ModelChoiceField(queryset = PurchaseOrder.objects.all())
编辑:
我似乎犯了一个非常小的错误,在我对WorkflowObject
的定义中加入了括号,也就是说,我说的是purchase=models.ForeignKey('PurchaseOrder')
,而不是purchase=models.ForeignKey(PurchaseOrder)
首先,您可以尝试将代码缩减为:
其次,我不明白为什么你在另一个案例中写了
forms.ModelChoiceField(...)
和另一个案例ModelForm
实例forms.ModelForm
?似乎您的工作流中没有什么特殊的内容,因此您可以定义如下:
将自动创建关系的字段。
文档:Creating forms from models
我有一个类似的问题,并且能够通过在models.py文件中声明所有类模型下面的所有modelForm类来解决这个问题。这样,模型类在modelForm类之前加载。
相关问题 更多 >
编程相关推荐