我正在学习Django,并且正在研究模型。我创建了一个产品类
from django.db import models
class Product(models.Model):
title = models.CharField(max_length=10)
description = models.TextField(blank=False)
price = models.DecimalField(max_digits=10, decimal_places=2)
featured = models.BooleanField(default=False)
int = models.IntegerField(default=10)
,并且我正在尝试删除“ int”字段,但是django网站没有更新 改变之后。
删除模型字段(“ int”字段,请参见屏幕截图)后, 并运行
python manage.py makemigrations
python manage.py migrate
实时预览不会更新,并且会引发有关已删除字段的错误。关闭服务器并重新启动服务器后,(ctrl + c和
python manage.py runserver
页面会更新,并且不会引发任何错误
我正在使用sqlite。我尝试删除' pycache ',所有迁移也都在db.sql3中,重新创建了超级用户,但是在删除任何字段后,我仍然遇到相同的错误。
图片1->初始状态$
https://ibb.co/Yb6pmgr
图片2->删除“ {int}”字段https://ibb.co/xf1bJQJ之后
图片3->错误:$
https://ibb.co/0cPyRZv
答案 0 :(得分:0)
首先停止服务器,然后进行更改并运行python manage.py makemigrations
和python manage.py migrate
命令。也许可以,但是您正在使用Python中的reserved关键字。
如果它不起作用,那么现在就删除位于0001_initial.py
路径上的trydjango/src/products/migrations/
。如果您的数据库中已经有一些数据,请备份到某个地方。 int
是Python中的Built-in Functions之一。请不要在Python中的每个地方都这样命名约定。查看下面的示例,您将对此有所了解。
str_val = '1'
print(str_val) # 1
print(type(str_val)) # <class 'str'>
int_val = int(str_val)
print(int_val) # 1
print(type(int_val)) # <class 'int'>
这只是使用int()
将字符串值转换为整数值的简单示例。让我们为int()
分配一些值。
# by default
print(int) # <class 'int'>
print(type(int)) # <class 'type'>
# let's get the previous example again
str_val = '1'
print(str_val) # 1
print(type(str_val)) # <class 'str'>
# assign some value to int(). (please please please never do such a thing like this)
int = 'assigned string'
print(int) # 'assigned string'
print(type(int)) # <class 'str'>
int_val = int(str_val)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable
执行上述代码时,您将收到类似的错误。因此int()
不会将字符串进一步转换为整数。因为你违反了规则。现在,就像普通变量一样。不过,如果您确实要添加像int
这样的变量,则只需使用_int
或int_
,并且如果要将列名显示为int
,只需添加{{1} }名称。
db_column
在进行这些更改之前,请停止服务器。然后编辑,然后运行_int = models.IntegerField(default=10, db_column='int')
# or
int_ = models.IntegerField(default=10, db_column='int')
和python manage.py makemigrations
。我希望这个答案能以某种方式对您有所帮助。
更新:
此answer将帮助您在Python中找到所有保留的关键字,而不用其中任何一个作为变量名。