Ho qualche problema con un progetto Django su cui sto lavorando. Ora ho due applicazioni, che richiedono un bel po 'di sovrapposizione. Ho solo iniziato il secondo progetto (chiamato workflow
) e sto cercando di creare il mio primo modulo per quella applicazione. La mia prima applicazione si chiama po
. Nell'applicazione workflow
ho una classe denominata WorkflowObject
, che (per ora) ha un solo attributo: una chiave esterna a PurchaseOrder
, che è definita in po/models.py
. Ho importato quella classe con from po.models import PurchaseOrder
.Django: ValueError: impossibile creare il campo modulo perché il suo modello correlato non è stato ancora caricato
Quello che sto cercando di fare è avere una pagina in cui un utente crea un nuovo PurchaseOrder
. Funziona correttamente (è la stessa forma che ho usato nella mia applicazione PurchaseOrder
), e quindi usa quell'istanza della classe per creare un WorkflowObject
. Il problema ora è che ottengo l'errore: ValueError: Cannot create form field for 'purchase' yet, because its related model 'PurchaseOrder' has not been loaded yet
. Non sono davvero sicuro da dove cominciare. Stava funzionando bene (permettendomi di creare un nuovo PurchaseOrder
e inoltrato a un url con la sua chiave primaria nell'url) fino a quando non ho aggiunto la vista che dovrebbe permettermi di creare un nuovo WorkflowObject
. Metterò che vista specifica qui:
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})
Le righe di codice che sembra essere causa l'errore (o per lo meno, una delle linee che viene mostrato nel traceback) è:
class WorkflowForm(ModelForm):
purchase = forms.ModelChoiceField(queryset = PurchaseOrder.objects.all())
EDIT: mi sembra di aver fatto un errore molto niubbo, e comprendeva parentesi nella mia definizione di WorkflowObject
, cioè, avevo detto purchase=models.ForeignKey('PurchaseOrder')
, invece di purchase=models.ForeignKey(PurchaseOrder)
Si dovrebbe provare a caricare l'app PurchaseOrder prima dell'applicazione WorkflowForm nelle impostazioni. Potrebbe funzionare. – tsurantino