У меня есть страница 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
?
Есть ли таблица продуктов уже существует, когда вы добавляете теги ManyToMany и вы синхронизируете db? если да, то django не может идентифицировать изменения на уровне поля в syncdb. Либо вам нужно стереть ваш дБ, либо снова выполнить синхронизацию, либо использовать [django south] (http://south.aeracode.org/) –
Я не осознавал этого ограничения. Я посмотрю на джанго на юг. Спасибо, Аамир! – fildred13