我创建了一个名为Bussinesses的新django应用程序(不是项目),然后将以下类添加到models.py中.
class Bussinesses(models.Model):
business_email = models.EmailField()
password = models.CharField(max_length=20)
contact_first_name = models.CharField(max_length=30)
contact_last_name = models.CharField(max_length=30)
Run Code Online (Sandbox Code Playgroud)
如果我直接使用Bussinesses,django将访问数据库中的"bussinesses_bussinesses"表,它显然不存在.
因为表"bussinesses"也被另一个APP使用,所以不能重命名它.我想知道如何使用Djano模型而不使用表前缀,我不想直接使用原始数据库API.
非常感谢.
Ben*_*kin 41
只需使用模型元选项.
class Bussinesses(models.Model):
business_email = models.EmailField()
password = models.CharField(max_length=20)
contact_first_name = models.CharField(max_length=30)
contact_last_name = models.CharField(max_length=30)
class Meta:
db_table = "bussinesses"
Run Code Online (Sandbox Code Playgroud)
BTW 业务拼写错误.由于您要指定表的名称,因此您不必为模型指定与表相同的名称,因此如果表名拼写错误并且您无法轻松修复它,则至少可以更改名称你的班级适当的拼写业务.我也会摆脱多元化,并成功class Business.最后,在现有数据库上使用Django或Rails需要为每个表设置自定义表名时并不罕见.
顺便说一句,如果您想更改(或删除)所有表的前缀,您可以提供自己的元类。如果您有多种情况,例如Businesses您希望类名和表名相同,这将非常有用。
例如,以下代码为所有表添加前缀FOO_而不是appname_:
class MyModelBase( ModelBase ):
def __new__( cls, name, bases, attrs, **kwargs ):
if name != "MyModel":
class MetaB:
db_table = "FOO_" + name
attrs["Meta"] = MetaB
r = super().__new__( cls, name, bases, attrs, **kwargs )
return r
class MyModel( Model, metaclass = MyModelBase ):
class Meta:
abstract = True
class Businesses( MyModel ):
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15318 次 |
| 最近记录: |