如果我有 myapp/models.py
from django.db import models
class FooBar(models.Model):
x = models.BooleanField()
class Foobar(models.Model):
y = models.BooleanField()
并将 myapp
添加到 INSTALLED_APPS
并执行 syncdb
,我只将 FooBar
模型转换为数据库 table 。 Foobar
模型被忽略。
另一个需要注意的奇怪的事情是当我们这样做的时候
from myapp import models
FooBar
和 Foobar
都作为 models
的属性出现。然而,
>>> models.FooBar.__name__
'FooBar'
>>> models.Foobar.__name__
'FooBar'
两者都只是 FooBar
的数据库表的接口(interface)(默认为 myapp_foobar
)。
我问这个问题是因为在我看来,django 模型名称不区分大小写,但我还没有找到任何说明这一点的文档,而且 this问题的回答是 django 模型名称区分大小写。
最佳答案
Django 模型名称不区分大小写,但基本上,Django 从应用程序和模型名称创建一个小写的表名称。因此 myapp
中的 FooBar
将生成一个 myapp_foobar 表,Foobar
也是如此。
显然在您的示例中,名称会重叠。 Django 应该警告冲突的表名,而是默默地忽略冲突的模型。
要解决此问题,我建议您为两个模型使用明确且不同的表名。使用 Meta 内部类,并设置 Meta.db_table。查看Django documentation on models Meta .
给出的例子:
class FooBar(models.Model):
x = models.BooleanField()
class Meta:
db_table = 'myapp_foobar_one'
class Foobar(models.Model):
x = models.BooleanField()
class Meta:
db_table = 'myapp_foobar_two'
在现实环境中,我绝不会在同一个应用中有两个相似的模型名称。它极易出错。
关于python - Django 模型名称不区分大小写,对吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24071574/