在 Django 中更改表名

fra*_*ous 5 python django

我读过可以使用Meta Options自定义 Django 中的表名。我想知道如何使用 db_table 选项继续使用应用程序名称但稍微修改模型名称而不对应用程序名称进行硬编码。

例如,在 Django 教程中,应用名称是“polls”,模型名称是“poll”。假设我希望该表被称为“polls_mypoll”而不是“polls_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")
Run Code Online (Sandbox Code Playgroud)

同样,如果我想明确地定义 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)
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为 Poll 没有在 Meta 中定义。

Mac*_*Gol 1

您收到的异常Poll is not defined是由您在构造类(尚未插入全局范围)时db_table = "%s_%s" % (Poll._meta.app_label, Poll._meta.model_name)引用该类的语句引起的。如果您想在 中Poll使用对 的引用,请考虑编写自己的继承自ModelBase 的元类,并正确设置值。那时,名称将不可用,但实际的对象将被构造并由您来操作。Polldb_table_meta.db_tablePoll