0

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を見つけることができません。では、デフォルトを変更するにはどうすればよいですか?

4

2 に答える 2

3

主に内部クラスを使用して、Djangoのモデルの動作をオーバーライドできますMeta

  • db_tableテーブル名の名前を変更できます
  • 主キーとして別のフィールドを指定すると、代理キーではなくそのフィールドが使用されます(Metaクラスではなく、モデル自体でのみ)
于 2011-01-11T15:29:43.333 に答える
1

物事をカスタマイズする前に、チュートリアル全体を通して試して作業する必要があります。これらすべてのこと実際のドキュメントでカバーされていますが、それに飛び込む前に、まず物事の基本的な理解を持っていることが最善です。

FWIW、ここにあなた自身の主キーを定義し、テーブル名を指定することに関するドキュメントがあります。しかし実際には、最初に書かれたようにチュートリアルを実行してください。

于 2011-01-11T15:31:20.673 に答える