Issue
I'm having some trouble with a Django project I'm working on. I now have two applications, which require a fair bit of overlap. I've really only started the second project (called workflow
) and I'm trying to make my first form for that application. My first application is called po
. In the workflow
application I have a class called WorkflowObject
, which (for now) has only a single attribute--a foreign key to a PurchaseOrder
, which is defined in po/models.py
. I have imported that class with from po.models import PurchaseOrder
.
What I'm trying to do is have a page where a user creates a new PurchaseOrder
. This works fine (it's the same form that I used in my PurchaseOrder
application), and then uses that instance of the class to create a WorkflowObject
. The problem now, is that I get the error: ValueError: Cannot create form field for 'purchase' yet, because its related model 'PurchaseOrder' has not been loaded yet
. I'm really not sure where to start with this. It was working ok (allowing me to create a new PurchaseOrder
and forward to a url with its primary key in the url) until I added the view that should allow me to create a new WorkflowObject
. I'll put that specific view here:
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})
The lines of code that seem to be causing the error (or at least, one of the lines that is shown in the traceback) is:
class WorkflowForm(ModelForm):
purchase = forms.ModelChoiceField(queryset = PurchaseOrder.objects.all())
EDIT:
I seem to have made a very noob mistake, and included parentheses in my definition of WorkflowObject
, that is, I had said purchase=models.ForeignKey('PurchaseOrder')
, instead of purchase=models.ForeignKey(PurchaseOrder)
Solution
Firstly, you can try reduce code to:
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})
Secondly, I not understood why you at other case wrote forms.ModelChoiceField(...)
and another case ModelForm
instance forms.ModelForm
?
Answered By - Abbasov Alexander
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.