mja*_*ews 2 python django django-models
如果我有 myapp/models.py
from django.db import models
class FooBar(models.Model):
x = models.BooleanField()
class Foobar(models.Model):
y = models.BooleanField()
Run Code Online (Sandbox Code Playgroud)
并加入myapp到INSTALLED_APPS做一个syncdb,我只得到FooBar模型转换成数据库表。该Foobar模型被忽略。
另一个需要注意的奇怪事情是,当我们做
from myapp import models
Run Code Online (Sandbox Code Playgroud)
两者FooBar并Foobar存在它们的属性models。然而,
>>> models.FooBar.__name__
'FooBar'
>>> models.Foobar.__name__
'FooBar'
Run Code Online (Sandbox Code Playgroud)
并且两者都只是FooBar(默认情况下myapp_foobar)的 db 表的接口。
我问这个问题是因为在我看来,django 模型名称不区分大小写,但我还没有找到任何说明这一点的文档,而且这个问题的回答是 django 模型名称区分大小写。
Django 模型名称不区分大小写,但基本上,Django 根据应用程序和模型名称创建一个小写的表名称。因此FooBar,在myapp中的 将生成一个 myapp_foobar 表,而Foobar.
显然,在您的示例中,名称会重叠。Django 应该警告冲突的表名,而是默默地忽略冲突的模型。
为了解决这个问题,我建议您为两个模型使用明确且不同的表名。使用 Meta 内部类,并设置 Meta.db_table。请参阅模型 Meta 上的Django 文档。
给出的例子:
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'
Run Code Online (Sandbox Code Playgroud)
在现实世界的环境中,我永远不会在同一个应用程序中有两个相似的模型名称。它非常容易出错。
| 归档时间: |
|
| 查看次数: |
1862 次 |
| 最近记录: |