许多与许多关系,既没有安装也没有抽象

时间:2011-01-01 18:09:43

标签: django django-models

考虑以下(简化)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/

该模型看起来对我有效,所以这里有什么问题?

3 个答案:

答案 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')

纠正这个流浪资本也解决了这个问题。