2011-01-11 8 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

Вы можете изменить модель поведения в Django в основном за счетом использования в inner Meta class

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

безупречный thankyou! : О) – PDStat

1

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

FWIW, вот документы на defining your own primary key и specifying a table name. Но действительно, сделайте учебник, как написано первым.

Смежные вопросы