3

新しい m2m モデルで syncdb を実行すると、次のエラーが表示されます。

エラー: 1 つ以上のモデルが検証されませんでした: 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 関係を指定します

4

2 に答える 2

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クラスから定義した各モデルを継承する必要があります。残りはすべて問題ないようです。

于 2013-01-10T08:48:32.183 に答える
0

Service_Categoryから継承する必要がありますmodels.Model

すなわち、class Service_Category(models.Model):

于 2013-01-10T08:24:34.810 に答える