изменение настроек модели Django по умолчанию - PullRequest
0 голосов
/ 11 января 2011

Я только начинаю с того, что django создает ваше собственное учебное приложение (создание опроса). Я немного отклоняюсь, потому что хочу создать приложение, используя мою собственную модель базы данных, которая уже существует.

И в учебном пособии говорится, что

  • Имена таблиц автоматически генерируются путем объединения имени приложения (опросы) и имени модели в нижнем регистре - опрос и выбор.(Вы можете переопределить это поведение.)
  • Первичные ключи (идентификаторы) добавляются автоматически.(Вы также можете переопределить это.)
  • По соглашению, 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, так какна самом деле называется каналами.Так как мне изменить значение по умолчанию?

Ответы [ 2 ]

3 голосов
/ 11 января 2011

Вы можете переопределить поведение модели в Django, в основном, используя внутренний Meta класс

  • db_table, позволяющий переименоватьимя таблицы
  • с указанием другого поля в качестве первичного ключа будет использовать его вместо суррогатного ключа (не в классе Meta, а в самой модели)
1 голос
/ 11 января 2011

Прежде чем пытаться настроить вещи, вы должны попробовать пройти весь курс обучения.Все эти вещи описаны в фактической документации, но лучше сначала иметь представление о вещах, прежде чем углубляться в это.

FWIW, вот документы по , определяющие вашсобственный первичный ключ и с указанием имени таблицы .Но на самом деле, сделайте урок, как написано первым.

...