django m2m 模型不同步

wayfarer 阅读:34 2025-04-02 23:11:03 评论:0

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

错误:一个或多个模型未验证: services.service: 'categories' 通过model 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 关系,还没有安装

请您参考如下方法:

你没有正确定义你的中间模型

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 类定义的每个模型。 休息一切似乎都很好。


标签:Django
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号