这是关于Delete field from standard Django model的后续问题。简而言之:可以从已创建的模型中动态删除字段,在本例中为User.email字段。因此,在不更改用户代码的情况下,将从用户删除字段电子邮件。例如,请参阅下面的代码。
我可以动态删除模型中的字段(1),但这会在服务器启动时发生,并在存在时撤消。由于syncdb不需要服务器运行,并且通常似乎忽略了删除代码(不知何故),这种方法不会阻止该字段出现在数据库中(2)。
有没有办法从模型中删除字段(不更改它所在的文件,因为它是Django模型),这种方式也使它不会出现在数据库中?
提前致谢!
标记
编辑:我的问题是不,我正在从模型文件中删除文本“m = models.IntegerField()
”,并希望从数据库中删除该字段。问题是我使用下面的代码从已经在另一个文件中声明的模型中删除一个字段。我不认为每次运行syncdb时都使用South创建迁移是一种解决方案(3)。
其他信息:
这是代码(models.py):
class A(models.Model):
m = models.IntegerField()
for i, f in enumerate(A._meta.fields):
if f.name == 'm':
del A._meta.fields[i]
break
class B(A):
n = models.IntegerField()
for i, f in enumerate(B._meta.fields):
if f.name == 'm':
del B._meta.fields[i]
break
编辑:我检查了(带打印),删除代码 在syncdb上执行。它在创建表之前执行
答案 0 :(得分:0)
django做了很多元类魔术,我猜想meta类负责定义数据库表来支持你的模型。随后只删除该字段不足以改变生成的表。
有几个人指出,south是处理这些问题的方法。