【问题标题】:changing django default model settings更改 django 默认模型设置
【发布时间】:2011-01-11 15:25:30
【问题描述】:

我刚开始使用 django 创建自己的应用程序教程(创建投票)我有点偏离,因为我想使用我自己已经存在的数据库模型创建一个应用程序。

在教程中它说

  • 表名是自动的 通过组合名称生成 应用程序(民意调查)和小写字母 模型名称——投票和选择。 (您可以覆盖此行为。)
  • 已添加主键 (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)

现在当我进入 shell 时,这就是我得到的

>>> 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,因为它实际上被称为频道。那么如何更改默认值呢?

【问题讨论】:

    标签: python mysql sql django mysql-error-1146


    【解决方案1】:

    您可以在很大程度上通过使用 inner Meta class 来覆盖 Django 中的模型行为

    • db_table 允许你重命名表名
    • 将另一个字段指定为主键将使其使用该字段而不是代理键(不在Meta 类中,仅在模型本身中)

    【讨论】:

      【解决方案2】:

      在尝试自定义内容之前,您应该尝试按照教程的所有方式进行操作。所有这些内容都包含在实际文档中,但最好在深入了解之前先对事物有一个基本的了解。

      FWIW,这里是 defining your own primary keyspecifying a table name 上的文档。但实际上,请先按照编写的教程进行操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-15
        • 1970-01-01
        • 2014-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多