2011-01-01 3 views
6

xem xét như sau (giản thể) Django Models:Nhiều người đến Nhiều mối quan hệ đó đã hoặc chưa được cài đặt hoặc là trừu tượng

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) 

tôi nhận được lỗi sau:

products.productmodel: 'productDownloads' has an m2m relation with model productModelDownLoad, which has either not been installed or is abstract.

Tôi tìm thấy một trang trong tài liệu django dường như giải quyết vấn đề này, nhưng tôi hoàn toàn không hiểu ý nghĩa của nó: http://www.djangoproject.com/documentation/models/invalid_models/

Mô hình có vẻ hợp lệ với tôi, vì vậy, là vấn đề ở đây?

Trả lời

1

Điều thú vị là có hai cách để giải quyết này :
a) Câu trả lời của Thomas hiện các trick,
b) Nhưng, thì Mike Korobov của:
có một chữ cái viết hoa đi lạc trong tên trường trong mối quan hệ:

productDownloads = models.ManyToManyField('productModelDown*L*oad')

Việc sửa đổi vốn đi lạc này cũng giải quyết được vấn đề này.

+1

Phần thú vị là bằng cách thay đổi thứ tự của các mô hình, chúng cũng được xác nhận. Điều này thậm chí còn mong muốn? –

9

Bạn phải đặt sản phẩm lớpModelTải xuống trước sản phẩmMô hình lớp. Chúng được xử lý từ trên xuống dưới trong khi xác nhận các mô hình.

+0

Ok, điều đó đã làm điều đó. –

2

models.ManyToManyField ('productModelDownLoad') - 'Load' được uppercased

lớp productModelDownload (models.Model): - 'tải' là trong trường hợp thấp hơn

+0

Cảm ơn bạn, tôi cũng nhận thấy điều đó. –