更改Django默认模型设置

0 投票
2 回答
930 浏览
提问于 2025-04-16 09:46

我刚开始学习Django的创建应用教程(创建一个投票应用),不过我稍微偏离了一下,因为我想用我自己已经存在的数据库模型来创建一个应用。

在教程中提到:

  • 表的名字是自动生成的,它是通过把应用的名字(polls)和模型的名字(poll和choice)的小写形式结合起来得到的。(你可以改变这个默认设置。)
  • 主键(ID)会自动添加。(你也可以改变这个设置。)
  • 按照惯例,Django会在外键字段的名字后面加上“_id”。当然,你也可以改变这个。

但是我没有看到哪里提到如何改变这些默认设置?我定义我的模型是这样的:

from django.db import models

# Create your models here.
class Channels(models.Model):
    channelid = models.IntegerField()
    channelid.primary_key = True
    channelname = models.CharField(max_length=50)

现在当我进入命令行时,我得到的是这个:

>>> from tvlistings.models import *
>>> Channels.objects.all()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "C:\Python26\lib\site-packages\django\db\models\query.py", line 67, in __
repr__
    data = list(self[:REPR_OUTPUT_SIZE + 1])
  File "C:\Python26\lib\site-packages\django\db\models\query.py", line 82, in __
len__
    self._result_cache.extend(list(self._iter))
  File "C:\Python26\lib\site-packages\django\db\models\query.py", line 271, in i
terator
    for row in compiler.results_iter():
  File "C:\Python26\lib\site-packages\django\db\models\sql\compiler.py", line 67
7, in results_iter
    for rows in self.execute_sql(MULTI):
  File "C:\Python26\lib\site-packages\django\db\models\sql\compiler.py", line 73
2, in execute_sql
    cursor.execute(sql, params)
  File "C:\Python26\lib\site-packages\django\db\backends\util.py", line 15, in e
xecute
    return self.cursor.execute(sql, params)
  File "C:\Python26\lib\site-packages\django\db\backends\mysql\base.py", line 86
, in execute
    return self.cursor.execute(query, args)
  File "C:\Python26\lib\site-packages\MySQLdb\cursors.py", line 166, in execute
    self.errorhandler(self, exc, value)
  File "C:\Python26\lib\site-packages\MySQLdb\connections.py", line 35, in defau
lterrorhandler
    raise errorclass, errorvalue
DatabaseError: (1146, "Table 'tvlistings.tvlistings_channels' doesn't exist")

显然,它找不到表tvlistings_channels,因为它实际上叫channels。那么我该如何改变这个默认设置呢?

2 个回答

1

在你尝试自定义一些东西之前,最好先把整个教程都看一遍。这些内容在官方文档里都有讲解,但在深入之前,先对基本概念有个了解会更好。

顺便说一下,这里有关于定义你自己的主键指定表名的文档。不过,真的建议你先按照教程的步骤来做。

3

在Django中,你可以通过使用一个叫做内嵌的 Meta 类来改变模型的行为。

  • db_table 让你可以给数据库中的表起个新名字。
  • 如果你想用其他字段作为主键,可以在模型里指定这个字段,而不是使用默认的主键(这个设置不在 Meta 类里,而是在模型本身)。

撰写回答