2011-01-11 121 views
0

我刚开始创建自己的应用程序教程(创建一个民意测验)Django略有偏差,因为我想创建一个使用我自己的数据库模型,已经存在的应用程序。更改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) 

现在,当我进去的壳,这是我所得到的

>>> 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因为它实际上是所谓的渠道。那么如何更改默认值?

回答

3

您可以在很大程度上通过使用一个inner Meta class

  • db_table覆盖的Django模型的行为可以重命名表名
  • 指定另一个字段作为主键将其使用,而不是代理键(不在Meta类中,只在模型本身中)
+0

完美谢谢! :O) – PDStat 2011-01-11 15:50:55

1

在尝试自定义事情之前,您应该尝试通过教程努力学习。所有这些事情都是在实际文档中所涵盖的内容,但最好在深入研究之前先对事物有基本的了解。

FWIW,这里是defining your own primary keyspecifying a table name的文档。但是,真的,先写教程吧。