2011-01-11 180 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的文檔。但是,真的,先寫教程吧。