2014-12-04 2 views
0

В одном из моих приложений Django есть ModelForm на основе модели, которая имеет ForeignKey из другого приложения. Код выглядит следующим образом:Ошибка Django в форме - ValueError: Невозможно создать поле формы

App - EstoqueGeral - models.py:

class ItemEstoqueGeral(models.Model): 
    nome = models.CharField(max_length=200, verbose_name="Nome do Produto") 
    preco_de_compra = models.DecimalField(decimal_places=2, max_digits=6, verbose_name="Preço de Compra") 
    codigo_fornecedor = models.CharField(max_length=10, verbose_name="Código do Fornecedor") 
    peso_em_Kg = models.DecimalField(decimal_places=1, max_digits=6, verbose_name="Peso (Kg)") 
    quantidade_estoque_geral = models.IntegerField(verbose_name="Quantidade no Estoque Geral") 
    quantidade_minima_estoque_geral = models.IntegerField(verbose_name="Quantidade Mínima no Estoque Geral") 

App - EstoqueLoja - models.py:

from django.db import models 
import ast 
from django import forms 
from django.forms import ModelForm 

class Loja(models.Model): 
    nome_loja = models.CharField(max_length=200, verbose_name="Nome da Loja") 

    def __unicode__(self): 
     return self.nome_loja 

class itemEstoqueLoja(models.Model): 
    item_estoque = models.ForeignKey('EstoqueGeral.ItemEstoqueGeral', verbose_name="Item do Estoque") 
    loja = models.ForeignKey(Loja) 
    preco_loja = models.DecimalField(decimal_places=2, max_digits=6, verbose_name="Preço da Loja") 
    quantidade_estoque_loja = models.IntegerField(verbose_name="Quantidade no Estoque da Loja") 
    quantidade_minima_estoque_loja = models.IntegerField(verbose_name="Quantidade Mínima no Estoque da Loja") 

    def __unicode__(self): 
     return self.loja.nome_loja + " - " + self.item_estoque.nome 

class itemEstoqueLojaForm(ModelForm): 
    class Meta: 
     model = itemEstoqueLoja 

И я пытаюсь использовать itemEstoqueLojaForm на представлении , например:

from django.shortcuts import render 
from EstoqueLoja.models import Loja, itemEstoqueLoja, itemEstoqueLojaForm 
from django.shortcuts import render 
from django.http import HttpResponseRedirect, HttpResponse 
from django.template import Context, loader 
from django.forms.models import modelform_factory 
from django.shortcuts import render_to_response, get_object_or_404 
from django.template import RequestContext 

def editar_estoque_loja(request, item_estoque_loja): 
    template = 'EstoqueLoja/editar_estoque_loja.html' 
    instance = itemEstoqueLoja.objects.get(pk=item_estoque_loja) 
    if request.method == 'POST': 
     form_itemestoqueloja = itemEstoqueLojaForm(request.POST, instance=instance) 
     if form_itemestoqueloja.is_valid(): 
      form_itemestoqueloja.save() 
      return HttpResponseRedirect('/EstoqueLojas') 
    else: 
     form_itemestoqueloja = itemEstoqueLojaForm(instance=instance) 
    return render_to_response(template, { 'form_itemestoqueloja' : form_itemestoqueloja }, context_instance = RequestContext(request)) 

Но когда я пытаюсь получить доступ к соответствующему URL-адресу, я получаю 500 внутренних серверов Er ROR. В моем журнале есть следующее:

ValueError: Cannot create form field for 'item_estoque' yet, because its related model 'EstoqueGeral.ItemEstoqueGeral' has not been loaded yet 

Я уже проверил свои настройки, и все выглядит нормально. Оба приложения находятся на INSTALLED_APPS, а EstoqueGeral - до EstoqueLoja. Кто-нибудь знает, что может вызвать эту ошибку?

+0

Прежде всего, вы должны поместить свои формы в другой файл, отличный от того, где находятся ваши модели. Я еще не пробовал свой код, но ваша проблема, вероятно, вызвана этим. – mp85

ответ

0

Если вы используете Django 1.6 вы можете быть встречая этот Django bug

Попробуйте импортировать свою первую модель (ItemEstoqueGeral) в свой 2-й models.py файл

App - EstoqueLoja - models.py

from EstoqueGeral.models import ItemEstoqueGeral 
0

В случае отношения с внешним ключом сначала должна быть указана модель («Родительская таблица»).

Смежные вопросы