我读过 Django 中的表名可以使用自定义元选项 https://docs.djangoproject.com/en/dev/ref/models/options/。我想知道如何使用 db_table 选项来继续使用应用程序名称,但稍微修改模型名称而不对应用程序名称进行硬编码。
例如,在 Django 教程中,应用程序名称为“polls”,模型名称为“poll”。假设我希望该表被称为“polls_mypoll”而不是“polls_poll”。这是我尝试过的,但无法访问外部类(未定义 Poll)
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Meta:
db_table = "%s_%s" % (Poll._meta.app_label, "mypoll")
同样,如果我想显式定义 db_table 作为默认 polls_poll 该怎么办?我知道我可以完全放弃类 Meta 并使用默认名称,但如果我想明确说明它怎么办?
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Meta:
db_table = "%s_%s" % (Poll._meta.app_label, Poll._meta.model_name)
这也是行不通的,因为 Poll 没有在 Meta 中定义。
你得到的异常,Poll is not defined
,是由你造成的db_table = "%s_%s" % (Poll._meta.app_label, Poll._meta.model_name)
声明引用Poll
类仍在构造中(尚未插入全局范围)。如果您想使用参考Poll
in the db_table
,考虑编写您自己的继承自的元类模型库 https://github.com/django/django/blob/master/django/db/models/base.py#L54,并设置_meta.db_table
正确地估价。那时,Poll
名称将不可用,但实际的对象将被构造并由您来操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)