为了改进我的代码和数据库,我需要更改模型中的字段名称,使其远离容易混淆且接近保留字的值.
原始模型实际上是这样的:
class Company(models.Model):
my_old_name = models.CharField(max_length=100, db_index=True)
Run Code Online (Sandbox Code Playgroud)
新模型实际上是这样的:
class Company(models.Model):
my_new_name = models.CharField(max_length=100, db_index=True)
Run Code Online (Sandbox Code Playgroud)
我跑了:
python manage.py makemigrations my_app
迁移代码是这样的:
class Migration(migrations.Migration):
dependencies = [
('my_app', '0004_auto_20160605_1852'),
]
operations = [
migrations.RenameField(
model_name='company',
old_name='my_old_name',
new_name='my_new_name',
),
]
Run Code Online (Sandbox Code Playgroud)
然后我执行了:
python manage.py migrate
Run Code Online (Sandbox Code Playgroud)
该网站运行正常.所有页面都会显示并根据需要使用"new_name".但是,我无法使用管理站点来管理数据库.它抛出错误:
Error during template rendering
In template /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/s... error at line 91
'Company' object has no attribute 'my_old_name'
Run Code Online (Sandbox Code Playgroud)
我已经有一段时间没有运气了.任何帮助,将不胜感激.
作为第一个建议的补充,这是admin.py的内容:
from django.contrib import admin
from .models import Company, Parameters
admin.site.register(Company)
admin.site.register(Parameters)
Run Code Online (Sandbox Code Playgroud)
它不包含'my_old_name'...
我正在寻找一种方法来更改 Django 表单中输入框的宽度。
参数的模型代码如下所示:
my_integer = models.IntegerField('Window', default=50)
Run Code Online (Sandbox Code Playgroud)
并且,将其放入表单中,生成的 HTML 代码如下:
<input id="id_my_integer" name="my_integer" value="50" type="number">
Run Code Online (Sandbox Code Playgroud)
而且,这个框相当宽——大约有 20 个字符。
如果我在表单类 Meta 的定义中添加代码:
widgets = {
'my_integer': forms.TextInput(attrs={'size':'3', 'maxlength':'3'}),
}
Run Code Online (Sandbox Code Playgroud)
我得到一个 5-6 个字符宽的框,可让我插入 3 个字符,HTML 代码将类型更改为 type='text' 并且递增/递减箭头消失。
所以,我真正想要的是一个 3 个字符宽的框,具有 3 个字符的输入限制,并具有NumberInput小部件的递增/递减箭头。我该怎么做呢?