我已经有一个名为“mydb”的数据库,我有一个名为“AERODROME”的表。
我的models.py看起来像这样:
from django.db import models
class Aerodrome(models.Model):
Name = models.CharField(max_length=48)
Latitude = models.DecimalField(decimal_places=4, max_digits=7)
Longitude = models.DecimalField(decimal_places=4, max_digits=7)
我在views.py上有这个方法:
from django.shortcuts import render
from helloworld.models import Aerodrome
def aerodromes(request):
return render(request, 'aerodromes.html', {'aerodromes': Aerodrome.objects.all()})
在我的模板文件夹中,我有aerodromes.html,这也很简单:
<!doctype html>
<html>
<head>
</head>
<body>
<table>
{% for aerodrome in aerodromes %}
<tr>
<td>{{ aerodrome.Name }}</td>
<td>{{ aerodrome.Longitude }}</td>
<td>{{ aerodrome.Latitude }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
当我通过浏览器测试时,我收到一个错误,因为它看起来像是用错误的名称访问该表。我的应用程序被称为“helloworld”,因为它是一个测试,而不是访问mydb.AERODROMES,它访问mydb.helloworld_aerodrome(还要注意区分大小写的问题)。
由于我已经填充了数据库,因此我没有运行syncdb(我知道这不是必需的,但也许这就是问题所在。)
所以,问题是我不知道为什么它会在表名中添加“helloworld_”,而且我还不确定我在哪里修正表名(并且从那里开始)具有“机场”而不是“AERODROMES”的区分大小写的问题。
这里有任何帮助吗?
答案 0 :(得分:18)
使用Meta
模型定义中的models.py
类(documentation here):
class Aerodrome(models.Model):
Name = models.CharField(max_length=48)
Latitude = models.DecimalField(decimal_places=4, max_digits=7)
Longitude = models.DecimalField(decimal_places=4, max_digits=7)
class Meta:
db_table = 'AERODROMES'
这将覆盖SQL数据库中模型表的默认命名方案。
您还可以添加managed
属性来控制python manage.py syncdb
和python manage.py flush
是否管理该表。
class Aerodrome(models.Model):
# ...
class Meta:
db_table = 'AERODROMES'
managed = False
有了这个,你可以syncdb
而不用担心擦除你的数据。
答案 1 :(得分:1)
明确指定模型的表名应该有所帮助:
from django.db import models
class Aerodrome(models.Model):
Name = models.CharField(max_length=48)
Latitude = models.DecimalField(decimal_places=4, max_digits=7)
Longitude = models.DecimalField(decimal_places=4, max_digits=7)
class Meta:
db_table = 'AERODROMES'
答案 2 :(得分:1)
: 当您通过db_table覆盖表名时,强烈建议使用小写表名,特别是如果您使用的是MySQL后端。有关更多详细信息,请参阅MySQL说明。
https://docs.djangoproject.com/en/1.11/ref/databases/#table-names
答案 3 :(得分:1)
您可以设置db table name in models Meta
class。如
class Aerodrome(models.Model):
Name = models.CharField(max_length=48)
Latitude = models.DecimalField(decimal_places=4, max_digits=7)
Longitude = models.DecimalField(decimal_places=4, max_digits=7)
class Meta:
db_table="AERODROMES"
如果您在外部预填充表格。注意每个记录/字段中的数据是否合适/兼容。
但是,您必须syncdb
,因为创建了django所需的其他表。