考虑以下(简化)Django模型:
class productFamily(models.Model):
name = models.CharField(max_length = 256)
text = models.TextField(blank = False)
image = models.ImageField(upload_to="products/img/")
def __unicode__(self):
return self.name
class productModel(models.Model):
productFamily = models.ForeignKey('productFamily')
productFamily.help_text = 'ProductFamily to which this model belongs.'
artNumber = models.CharField(max_length=100)
name = models.CharField(max_length = 256)
productDownloads = models.ManyToManyField('productModelDownLoad')
productDownloads.help_text = 'Files associated to this product Model.'
def __unicode__(self):
return self.name
class productModelDownload(models.Model):
file = models.FileField(upload_to="products/downloads/")
def __unicode__(self):
return str(self.file)
我收到以下错误:
products.productmodel:'productDownloads'与模型productModelDownLoad有一个m2m的关系,它没有安装或是抽象的。
我在django文档中找到了一个似乎解决这个问题的页面,但我无法理解它的含义: http://www.djangoproject.com/documentation/models/invalid_models/
该模型看起来对我有效,所以这里有什么问题?
答案 0 :(得分:9)
您必须在productModel类之前放置productModelDownload类。 它们在验证模型的同时从上到下进行处理。
答案 1 :(得分:2)
models.ManyToManyField('productModelDownLoad') - '加载'是大写的
class productModelDownload(models.Model): - 'load'是小写的
答案 2 :(得分:1)
有趣的是,有两种方法可以解决这个问题:
a)托马斯的答案就是诀窍,
b)但是,Mike Korobov也是如此:
关系字段中的字段名称中有一个流浪大写字母:
productDownloads = models.ManyToManyField('productModelDown * L * oad')
纠正这个流浪资本也解决了这个问题。