Django的数据库表名

Rom*_*dgz 6 python mysql django

我已经有一个名为"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)
Run Code Online (Sandbox Code Playgroud)

我在views.py上有这个方法:

from django.shortcuts import render
from helloworld.models import Aerodrome

def aerodromes(request):
    return render(request, 'aerodromes.html', {'aerodromes': Aerodrome.objects.all()})
Run Code Online (Sandbox Code Playgroud)

在我的模板文件夹中,我有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>
Run Code Online (Sandbox Code Playgroud)

当我通过我的浏览器测试时,我收到一个错误,因为它看起来像是用错误的名称访问该表.我的应用程序被称为"helloworld",因为它是一个测试,而不是访问mydb.AERODROMES,它访问mydb.helloworld_aerodrome(还要注意区分大小写的问题).

由于我已经填充了数据库,我没有运行syncdb(我知道这不是必要的,但也许这就是问题).

所以,问题是我不知道为什么它会在表名中添加"helloworld_",而且我仍然不确定我在哪里修正表名(并且从那里开始出现区分大小写)有"机场"而不是"AERODROMES"的问题.

这里有什么帮助?

pzt*_*ick 19

在模型定义中使用Meta类(文档)models.py:

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'
Run Code Online (Sandbox Code Playgroud)

这将覆盖SQL数据库中模型表的默认命名方案.


您还可以添加managed到控制是否属性python manage.py syncdbpython manage.py flush管理表.

class Aerodrome(models.Model):
    # ...

    class Meta:
        db_table = 'AERODROMES'
        managed = False
Run Code Online (Sandbox Code Playgroud)

有了它,您可以syncdb放心地擦除数据.

  • 调用`Aerodrome.save()`将按预期工作,前提是数据库表实际上与模型定义相符(例如,具有匹配"Name","Latitude"和"Longitude"的正确模式).从[文件](https://docs.djangoproject.com/en/dev/ref/models/options/#managed):_"如果假,没有数据库表中创建或删除操作将成为这一模式进行. ..当managed = False时,这是唯一的区别.模型处理的所有其他方面与正常情况完全相同."_ (2认同)