Используйте представление базы данных в Django - PullRequest
3 голосов
/ 25 июня 2009

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

Я создал представление с именем "vi\_topics" вручную, и в нем был столбец "id", но я продолжал получать сообщение об ошибке, даже если я явно добавил поле "id", говоря

"нет такого столбца: vi_topics.id"

Вот определение моей модели с именем Vitopic:

from django.db import models

class Vitopic(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    author_name = models.CharField(max_length=200)
    author_email = models.CharField(max_length=200)
    view_count = models.IntegerField(default=0)
    replay_count = models.IntegerField(default=0)
    tags = models.CharField(max_length=255)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'vi_topics'

Примечание : я использую sqlite3.

Ответы [ 2 ]

3 голосов
/ 08 декабря 2010

Попробуйте это: http://docs.djangoproject.com/en/dev/ref/models/options/#managed

управляемый

Options.managed

Новое в Django 1.1: см. Примечания к выпуску

По умолчанию True, то есть Django создаст соответствующие таблицы базы данных в syncdb и удалит их как часть команды управления сбросом. То есть Django управляет жизненными циклами таблиц базы данных.

Если False, для этой модели не будет выполняться операция создания или удаления таблицы базы данных. Это полезно, если модель представляет существующую таблицу или представление базы данных, созданное другими способами. Это единственная разница, когда управляемый является ложным. Все остальные аспекты работы с моделью точно такие же, как и в обычном режиме. Это включает

  1. Добавление автоматического поля первичного ключа в модель, если вы его не объявили. Чтобы избежать путаницы для более поздних программ чтения кода, рекомендуется указывать все столбцы из таблицы базы данных, которую вы моделируете при использовании неуправляемых моделей.
  2. Если модель с управляемым = False содержит поле ManyToManyField, указывающее на другую неуправляемую модель, то промежуточная таблица для объединения «многие ко многим» также не будет создана. Однако будет создана промежуточная таблица между одной управляемой и одной неуправляемой моделью.

    Если вам нужно изменить это поведение по умолчанию, создайте таблицу-посредник в качестве явной модели (с управляемым набором по мере необходимости) и используйте атрибут ManyToManyField.through, чтобы отношение использовало вашу пользовательскую модель.

Для тестов, в которых участвуют модели с управлением = False, вы должны убедиться, что в рамках настройки теста созданы правильные таблицы.

1 голос
/ 30 марта 2010

id = models.IntegerField (primary_key = True)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...