2010-02-11 17 views
7

Dodałem definicję widoku do pliku $ template_dir/sql/$ someTableName.sql. (tworzenie lub zastępowanie widoku), więc za każdym razem, gdy uruchamiam syncdb, tworzone są widoki db.tworzenie modelu django dla istniejącego widoku bazy danych/sql?

Czy mogę utworzyć w modelu.py klasę python, która uzyskuje dostęp do tego widoku?

Czy lepszą praktyką jest po prostu używanie nieprzetworzonej funkcji języka SQL Pythona?

--- EDIT ---

Kolejny problem to fakt, że widok nie ma klucza podstawowego, ale Django wydaje się zakładając, że będzie jeden, bo pojawia się błąd caught an exception while rendering: (1054, "Unknown column 'appName_currentleagues.id' in 'field list'") Ale don „t mieć taki członek zdefiniowane:

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

więc domyślam się, że Django rozsądnie widzi, że nie zdefiniować klucz podstawowy w klasie CurrentLeagues, więc Django zakłada, że ​​jeden nazywa id. Czy istnieje sposób, aby powiedzieć Django, że nie ma klucza głównego (ponieważ jest to w rzeczywistości widok), czy to nawet nie jest mój problem?

Odpowiedz

5

Zobacz Unmanaged models

zdefiniować model jak zwykle i dodać managed = False do meta opcji:

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

Ale jak powiązać tę klasę Pythona z widokiem mysql, z którym chcę go powiązać? Czy muszę wyraźnie wpisać członków "MyModel" poprawnie, aby dopasować pisownię pól w widoku i to po prostu działa jakoś automatycznie? –

+0

Muszę tylko przeliterować widok jako 'appName_classname', ponieważ jest to pisownia, którą django automatycznie używa dla każdej instancji Modelu Pythona. –

+1

Możesz ręcznie przekazać nazwę widoku, używając opcji 'db_table' meta: http://docs.djangoproject.com/en/dev/ref/models/options/#db-table. Tak, będziesz musiał wpisać nazwy pól w, w przeciwnym razie django nie będzie mieć wersji python swoich modeli. Jeśli chcesz zmniejszyć ilość pisania, możesz użyć skomplikowanej sieci abstrakcyjnych modeli i dziedziczenia, ale utrzymam wszystko tak proste, jak to tylko możliwe, nawet jeśli oznacza to małe powtórzenie. –

3

próbować używać Pythona manage.py inspectdb lub python manage.py inspectdb> models.py

+0

Witamy w stosie – qdot

Powiązane problemy