更改model.py后Django网站预览未更新

时间:2019-06-24 05:54:02

标签: python django django-models

我正在学习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

1 个答案:

答案 0 :(得分:0)

首先停止服务器,然后进行更改并运行python manage.py makemigrationspython 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这样的变量,则只需使用_intint_,并且如果要将列名显示为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中找到所有保留的关键字,而不用其中任何一个作为变量名。