gpt4 book ai didi

django 将 ManyToMany 字段/表添加到现有架构,相关名称错误

转载 作者:行者123 更新时间:2023-12-02 06:20:22 25 4
gpt4 key购买 nike

我有一个带有模型的现有项目(用户和书籍)。我想将 ManyToMany(M2M) 字段添加到现有模型 Books,但syncbb 命令不执行此操作。

详细信息:图书已有一个映射到用户的 FK 字段,我想添加一个也映射到用户的新 M2M 字段(读者)。如您所知,Django 的syncdb 只关心表,因此添加普通字段很容易,但是M2M 需要一个新的联接表(app_books_user),所以syncdb cmd 不应该像任何其他新表一样添加它吗?它为图书的“卖家”字段创建了我的另一个连接表。

当我运行syncdb时,我最初收到一条错误,指示我使用“lated_name”参数来帮助区分对User的两个引用。我添加了那些。但是,当我再次运行syncdb时,它不会创建新的连接表(但现在没有错误)。当我通过 Shell 查看新字段时,该字段存在,但由于连接表不存在而无法使用它。我通过“sqlall”cmd 查看了 sql 代码,它打印出了新表的 SQL,但它没有被执行。

我错过了什么?我应该通过数据库浏览器强制执行 SQL(来自 sqlall)吗?这会产生任何影响吗?代码如下:

模型.py

from django.contrib.auth.models import User

class Seller(models.Model):
...

class Books(models.Model):

name=models.CharField(max_length=50)
author=models.ForeignKey(User, related_name='creator')
readers=models.ManyToManyField(User, blank=True, related_name='viewers')
sellers=models.ManyToManyField(Seller)

谢谢

最佳答案

syncdb 不会修改现有表(模型)。发生的情况是,即使添加 M2M 不会修改表(它应该只添加连接表),syncdb 也不会创建新表,因为它发现模型已经在数据库中并且正在跳过它。请参阅syncdb docs

[syncdb] Creates the database tables for all apps in INSTALLED_APPS whose tables have not already been created.

这有点令人困惑,因为从技术上讲,该表尚未创建,但行为是有意义的“该模型的表已创建吗?是的!然后不要同步它。”

一般来说,django不提供迁移数据库模式的机制(即添加列等)。因此,您必须通过原始 SQL 或使用第三方工具来完成此类操作。我强烈建议查看South .

关于django 将 ManyToMany 字段/表添加到现有架构,相关名称错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3989717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com