django m2m模型不同步

时间:2013-01-10 08:19:39

标签: django many-to-many models

当我在我的新m2m模型上运行syncdb时,我收到错误:

错误:一个或多个模型未验证: services.service:'categories'通过模型Service_Category指定m2m关系,该关系尚未安装

我尝试使用上面列出的示例 https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships

当我同步时它工作正常。所以我在下面的模型中找不到合适的东西。不确定为什么我的模型不工作,如果它是一个简单的错字或其他东西。注意:模型使用简单的m2m关系工作正常,但它不喜欢这种方式。感谢

from django.db import models

# Create your models here.




class Category(models.Model):

    name = models.CharField(max_length=50)
    slug = models.SlugField(max_length=50, unique=True,
                            help_text='Unique value for product page URL, created from name.')
    description = models.TextField()
    is_active = models.BooleanField(default=True)
    meta_keywords = models.CharField("Meta Keywords", max_length=255, blank = True, null = True,
                                     help_text='Content for description meta tag')
    meta_description = models.CharField(max_length = 255, blank = True, null = True,
                                        help_text = 'Content for description meta tag')
    created_at = models.DateTimeField(auto_now_add = True)
    updated_at = models.DateTimeField(auto_now = True)

    class Meta:
        #app_label = ''
        db_table = 'categories'
        ordering = ['created_at']
        verbose_name_plural = 'Categories'

    def __unicode__(self):
        return self.name

    @models.permalink   
    def get_absolute_url(self):
        return ('catalog_category', (), {'category_slug': self.slug})


class Service(models.Model):

    name = models.CharField(max_length=255, unique = True)
    slug = models.SlugField(max_length=255, unique = True,
                            help_text = 'Unique value for product page URL, created from name.')


    old_price = models.DecimalField(max_digits=9, decimal_places=2,
                                    blank = True, null = True, default = 0.0)
    image = models.CharField(max_length=50, blank = True)
    is_active = models.BooleanField(default = True)
    is_bestseller = models.BooleanField(default = False)
    is_featured = models.BooleanField(default = False)
    description = models.TextField()
    bullet1 = models.CharField(max_length=255, blank = True, null = True,
                               help_text = 'Option Bullet for description')
    bullet2 = models.CharField(max_length=255, blank = True, null = True,
                               help_text = 'Option Bullet for description')
    bullet3 = models.CharField(max_length=255, blank = True, null = True,
                               help_text = 'Option Bullet for description')
    bullet4 = models.CharField(max_length=255, blank = True, null = True,
                               help_text = 'Option Bullet for description')
    bullet5 = models.CharField(max_length=255, blank = True, null = True,
                               help_text = 'Option Bullet for description')    
    micro_current = models.BooleanField(default = False)

    meta_keywords = models.CharField(max_length = 255,blank = True, null = True, 
                                     help_text = 'Comma Delimited Set of SEO keywords for meta tag')
    meta_description = models.CharField(max_length = 255, blank = True, null = True,
                                        help_text = 'Content for description meta tag')
    created_at = models.DateTimeField(auto_now_add = True)
    updated_at = models.DateTimeField(auto_now = True)


    categories = models.ManyToManyField(Category, through='Service_Category')


    class Meta:
        #app_label = ''
        db_table = 'services'
        ordering = ['created_at']


    def __unicode__(self):
        return self.name


class Service_Category:

    category = models.ForeignKey(Category)
    service = models.ForeignKey(Service)
    micro_current = models.BooleanField(default = False)


    class Meta:
        #app_label = ''
        db_table = 'service_categories'

services.service:'categories'通过模型Service_Category指定m2m关系,该关系尚未安装

2 个答案:

答案 0 :(得分:4)

您错过了正确定义中间模型

class Service_Category(models.Model):

    category = models.ForeignKey(Category)
    service = models.ForeignKey(Service)
    micro_current = models.BooleanField(default = False)


    class Meta:
        #app_label = ''
        db_table = 'service_categories'

我们必须继承我们从models.Model类定义的每个模型。 休息一切似乎都很好。

答案 1 :(得分:0)

Service_Category需要继承models.Model

class Service_Category(models.Model):