【问题标题】:Django ManyToManyField fails to create "through" tableDjango ManyToManyField 无法创建“通过”表
【发布时间】:2013-03-28 23:44:21
【问题描述】:

我的电子商务网站有一个 models.py,它定义了 3 个模型。最初,它只定义了两个,ProductCategory,但我意识到我需要能够用某些关键字标记我的产品,所以我添加了那个模型。当我尝试 syncdb 并创建了新的 tag 表但不是 products_tags 'through' 表时出现了问题。

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 表,因为在 Product 类中建立了 ManyToMany 关系。为什么它成功创建了products_categories'through'表而不是products_tags

【问题讨论】:

  • 添加标签ManyToMany字段并同步db时产品表是否已经存在?如果是,则 django 无法识别同步数据库中的字段级别更改。您需要擦除数据库并再次同步或使用django south
  • 我没有意识到这个限制。我会看看django south。谢谢阿米尔!

标签: mysql django manytomanyfield syncdb


【解决方案1】:

正如 Aamir 在他的评论中所说,syncdb 没有迁移功能,这就是没有创建新的直通表的原因。我安装了 django south,现在更新表格完全符合预期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    相关资源
    最近更新 更多