2012-10-29 21 views
5

Załóżmy, że mam f pole w moim modelu zdefiniowane następująco jako klucz obcy:Django pole przyrostek ForeignKey z _id

f = models.ForeignKey(AnotherModel) 

Kiedy Django synchronizuje bazy, złożonego utworzone w db zostanie wywołana f_id automatycznie sufiksem z "_id".

Problem polega na tym, że chcę, aby to pole w db było nazywane dokładnie tym, co zdefiniowałem w modelu, f w tym przypadku. Jak mogę to osiągnąć?

Odpowiedz

11

Cóż, okazuje się, że istnieje argument słów kluczowych o nazwie db_column. Jeśli chcesz się pole o nazwie „F” w bazie danych jest tak proste, jak:

f = models.ForeignKey(AnotherModel, db_column='f') 

dalszego odniesienia:

Nazwa kolumny bazy danych do wykorzystania na tej dziedzinie. Jeśli nie zostanie podany, Django użyje nazwy pola.

Jeśli nazwa kolumny bazy danych jest słowem zastrzeżonym SQL lub zawiera znaków, które nie są dozwolone w nazwach zmiennych Python - w szczególności łącznik - to jest w porządku. Django cytuje nazwy kolumn i tabel za scenami.

https://docs.djangoproject.com/en/dev/ref/models/fields/#db-column

+1

myślę, że należy jasno stwierdzić, że ta opcja 'pole db_column' jest potrzebne w' AnotherModel', prawdopodobnie razem z 'primary_key = TRUE na polu' f'. – dschulz

+0

Dzięki @dschulz, ale co masz na myśli, mówiąc o tej opcji pola 'this 'db_column' w' AnotherModel'? Bo nie sądzę, że to, co 'f' jest wywoływane w bazie danych ma coś wspólnego z' AnotherModel', czy mam rację? –

+1

Ups! Myliłem się. Caperea, przepraszam. Mój mózg miał na myśli nazwę kolumny klucza głównego w "AnotherModel". Masz rację, użycie opcji 'db_column' w polu' f' powinno wystarczyć. – dschulz