gpt4 book ai didi

表的Django syncdb自定义名称

转载 作者:行者123 更新时间:2023-12-04 04:07:36 24 4
gpt4 key购买 nike

manage.py syncdbappname_modelname的形式为模型创建数据库表。如何使manage.py以modelname的格式创建表?

唯一的方法是添加class Meta:
db_table = u'modelname'

最佳答案

是的,更改已创建表名称的唯一方法是将db_table设置为内部Meta类。

参见https://docs.djangoproject.com/en/dev/ref/models/options/#table-names

但是,使用一些元类魔术,实际上可以完成您要寻找的东西。这个例子只是为了表明有可能,因为Python是一种很好的语言。由于ModelBase和_meta尚未正式记录在AFAIK中,因此它可以与Django的较新版本(即使不太可能)中断。我只是坚持在您的模型中手动添加db_table。

通过创建构造模型类的自定义元类,可以更改内部元类上的db_table属性。

from django.db import models
from django.db.models.base import ModelBase

class ModelWithoutAppNameBase(ModelBase):
def __new__(cls, name, bases, attrs):
model = super(ModelWithoutAppNameBase, cls).__new__(cls, name, bases, attrs)
model._meta.db_table = name.lower()
return model


class ModelWithoutAppName(models.Model):
__metaclass__ = ModelWithoutAppNameBase

然后,在创建模型时,您将从 ModelWithoutAppName而不是 django.db.models.Model继承:
class YourModel(ModelWithoutAppName):  # database table name will be yourmodel
foo = models.IntegerField()

关于表的Django syncdb自定义名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7497343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com