表单上的Django错误 - ValueError:无法创建表单字段

时间:2014-12-04 01:01:25

标签: python django django-models django-forms

我的一个Django应用程序有一个ModelForm,它基于一个Model,它有一个来自另一个app的ForeignKey。代码如下:

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内部服务器错误。在我的日志中有以下内容:

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

我已经检查了我的设置,一切看起来都很好。两个应用程序都在INSTALLED_APPS上,而EstoqueGeral在EstoqueLoja之前。有没有人知道可能导致错误的原因是什么?

2 个答案:

答案 0 :(得分:0)

如果您使用的是Django 1.6,可能会遇到此Django bug

尝试将第一个模型(ItemEstoqueGeral)导入第二个models.py文件

App - EstoqueLoja - models.py

from EstoqueGeral.models import ItemEstoqueGeral

答案 1 :(得分:0)

如果是外键关系,则必须首先声明引用的模型("父表")。