2013-03-28 3 views
1

У меня есть страница models.py, которая определяет 3 модели. Первоначально он определял только два, Product и Category, но я понял, что мне нужно будет пометить мои продукты определенными ключевыми словами, и поэтому я добавил эту модель. Проблема возникла, когда я попытался установить syncdb, и была создана новая таблица tag, но не таблица products_tags «через».Django ManyToManyField не удается создать таблицу «через»

class Category(models.Model): 
    **a bunch of variables** 

    class Meta: 
     db_table = 'categories' 
     ordering = ['name'] 
     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 Tag(models.Model): 
    **a bunch of variables** 

    class Meta: 
     db_table = 'tags' 
     ordering = ['name'] 
     verbose_name_plural = 'Tags' 

    def __unicode__(self): 
     return self.name 

class Product(models.Model): 
    **a bunch of variables** 
    categories = models.ManyToManyField(Category, related_name='cat+') 
    tags = models.ManyToManyField(Tag, related_name='tag+') 

    class Meta: 
     db_table = 'products' 
     ordering = ['-created_at'] 

    def __unicode__(self): 
     return self.name 

Это все подтверждает красиво, и когда я бегу python manage.py syncdb все таблицы создаются с помощью соответствующих строк и типов и все остальное можно было бы ожидать. Кроме того, он не создает таблицу products_tags, которую вы ожидаете создать из-за отношений ManyToMany, установленных в классе Product. Почему он успешно создает таблицу products_categories «через», но не products_tags?

+1

Есть ли таблица продуктов уже существует, когда вы добавляете теги ManyToMany и вы синхронизируете db? если да, то django не может идентифицировать изменения на уровне поля в syncdb. Либо вам нужно стереть ваш дБ, либо снова выполнить синхронизацию, либо использовать [django south] (http://south.aeracode.org/) –

+0

Я не осознавал этого ограничения. Я посмотрю на джанго на юг. Спасибо, Аамир! – fildred13

ответ

1

Как сказал Амира в своем комментарии, syncdb не имеет возможностей миграции, и поэтому новая сквозная таблица не создавалась. Я установил django на юг, и теперь обновление таблиц происходит точно так, как ожидалось.

Смежные вопросы