2010-02-11 2 views
7

Я вставил определение для вида в файл $ template_dir/sql/$ someTableName.sql. (создайте или замените представление), поэтому каждый раз, когда я запускаю syncdb, создаются представления db.создание модели django для существующей базы данных/sql view?

Могу ли я создать в models.py класс python, который обращается к этому представлению?

Лучше ли использовать вместо этого только функциональность sql-кода python?

--- EDIT ---

Другая проблема у меня есть, что точка зрения не имеет первичного ключа, но Джанго, кажется, предполагая, что будет один, потому что я получаю ошибку caught an exception while rendering: (1054, "Unknown column 'appName_currentleagues.id' in 'field list'") Но дон «т иметь определенный такой член:

Class CurrentLeagues(models.Model): 
     League = models.ForeignKey(League) 
     class Meta: 
       managed = False 

так что я думаю, что Джанго достаточно видит, что я не определить первичный ключ в классе CurrentLeagues, поэтому Django предполагает, что есть одна называется id. Есть ли способ сказать Django, что нет первичного ключа (поскольку это на самом деле представление), или это даже не моя проблема?

ответ

5

См Unmanaged models

Вы определяете модель, как обычно, и добавить к managed = False мете вариантов:

class MyModel(models.Model): 
    ... 
    class Meta: 
     managed = False 
+2

Но как мне связать этот класс python с представлением mysql, с которым я хочу связать? Нужно ли явно вводить члены «MyModel» правильно, чтобы соответствовать написанию полей в представлении, и он просто работает автоматически? –

+0

Мне просто нужно написать представление как 'appName_classname', потому что это правописание, которое django автоматически использует для каждого экземпляра модели python. –

+1

Вы можете вручную передать имя представления, используя опцию 'db_table' meta: http://docs.djangoproject.com/en/dev/ref/models/options/#db-table. Да, вам нужно будет ввести имена полей, иначе django не будет иметь версию ваших моделей на python. Если вы хотите уменьшить количество ввода, вы можете использовать сложную сеть абстрактных моделей и наследования, но я бы поставил вещи как можно проще, даже если это означает небольшое повторение. –

3

Попробуйте использовать питон manage.py inspectdb или питон manage.py inspectdb> models.py

+0

Добро пожаловать в Stack – qdot

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