7
votes

Django: ValueError: impossible de créer un champ de formulaire car son modèle associé n'a pas encore été chargé.

J'ai des problèmes avec un projet Django que je travaille. J'ai maintenant deux applications, qui nécessitent un peu de chevauchement juste. J'ai vraiment seulement commencé le deuxième projet (appelé workflow ) et j'essaie de faire mon premier formulaire pour cette application. Ma première application est appelée po . Dans l'application Workflow J'ai une classe appelée WorkflowObject , qui (pour l'instant) n'a qu'un seul attribut - une clé étrangère à un , qui est défini dans po / modèles.py . J'ai importé cette classe avec de Po.models Importerasororder .

Ce que j'essaie de faire est d'avoir une page dans laquelle un utilisateur crée un nouveau . Cela fonctionne bien (c'est la même forme que j'ai utilisée dans mon Application ), puis utilise cette instance de la classe pour créer un WorkflowObject . Le problème maintenant, c'est que je reçois l'erreur suivante: ValueError: impossible de créer un champ de formulaire pour «achat», car son modèle associé 'PASCHERODER' n'a pas encore été chargé . Je ne sais vraiment pas où commencer avec ça. Cela fonctionnait bien (me permettant de créer un nouveau commandant et de transmettre à une URL avec sa clé principale de l'URL) jusqu'à ce que j'ai ajouté la vue qui devrait me permettre de créer un nouveau WorkflowObject < / code>. Je vais mettre cette vue spécifique ici: xxx

Les lignes de code qui semblent causer l'erreur (ou au moins une des lignes montrées dans la trace ) est: xxx

éditer: Il me semble avoir fait une erreur très noob et inclus des parenthèses dans ma définition de WorkflowObject , c'est-à-dire que j'avais dit achat = modèles.forignkey ('"Panchiste") , Au lieu de Achat = Modèles.ForignKey (Publier)


1 commentaires

Vous devriez essayer de charger l'application de commande avant l'application Workflowform dans vos paramètres. Cela pourrait fonctionner.


3 Réponses :


0
votes

Premièrement, vous pouvez essayer de réduire le code à:

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})


0 commentaires

0
votes

semble qu'il n'y a rien de spécial dans votre flux de travail, vous pouvez donc la définir comme suit:

class WorkflowForm(ModelForm):
    class Meta:
        model = WorkflowObject


0 commentaires

1
votes

J'ai eu un problème similaire et j'ai pu résoudre ce problème en déclarant toutes mes classes ModeFormormes sous tous mes modèles de classe dans mon fichier Modèles.py. De cette façon, les classes de modèle ont été chargées avant les classes Modelform.


0 commentaires