Ich habe Probleme mit einem Django-Projekt, an dem ich gerade arbeite. Ich habe jetzt zwei Anwendungen, die ein gewisses Maß an Überlappung erfordern. Ich habe wirklich nur das zweite Projekt gestartet (workflow
) und ich versuche, meine erste Form für diese Anwendung zu machen. Meine erste Anwendung heißt po
. In der workflow
Anwendung habe ich eine Klasse namens WorkflowObject
, die (für jetzt) hat nur ein einziges Attribut - ein Fremdschlüssel zu einem PurchaseOrder
, der in po/models.py
definiert ist. Ich habe diese Klasse mit from po.models import PurchaseOrder
importiert.Django: ValueError: Formularfeld kann nicht erstellt werden, da das zugehörige Modell noch nicht geladen wurde
Was ich versuche zu tun, ist eine Seite, wo ein Benutzer eine neue PurchaseOrder
erstellt. Dies funktioniert einwandfrei (es ist das gleiche Formular, das ich in meiner PurchaseOrder
-Anwendung verwendet habe) und verwendet dann diese Instanz der Klasse, um eine WorkflowObject
zu erstellen. Das Problem jetzt ist, dass ich den Fehler bekomme: ValueError: Cannot create form field for 'purchase' yet, because its related model 'PurchaseOrder' has not been loaded yet
. Ich bin mir wirklich nicht sicher, wo ich damit anfangen soll. Es funktionierte ok (erlaubt mir, eine neue PurchaseOrder
zu erstellen und an eine URL mit seinem Primärschlüssel in der URL weiterzuleiten), bis ich die Ansicht hinzugefügt habe, die mir erlauben sollte, eine neue WorkflowObject
zu erstellen. Ich werde hier, dass bestimmte Ansicht setzen:
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})
Die Zeilen Code, der den Fehler zu sein scheinen verursacht (oder zumindest eine der Leitungen, die in der Rückverfolgungs gezeigt wird) ist:
class WorkflowForm(ModelForm):
purchase = forms.ModelChoiceField(queryset = PurchaseOrder.objects.all())
EDIT: ich scheine einen sehr Noob Fehler gemacht zu haben, und enthalten Klammern in meiner Definition von WorkflowObject
, das heißt, hatte ich gesagt purchase=models.ForeignKey('PurchaseOrder')
, statt purchase=models.ForeignKey(PurchaseOrder)
Sie sollten versuchen, die PurchaseOrder App vor der WorkflowForm App in Ihren Einstellungen zu laden. Das könnte funktionieren. – tsurantino