2011-10-26 12 views
6

Zastanawiam się, jakie są ludzkie myśli na temat łączenia modeli bezpośrednio z obiektem auth.User w porównaniu do modelu profilu użytkownika.Czy powinienem mieć wartość ForeignKey dla użytkownika Django lub modelu profilu?

Przechowuję różne typy modeli, które mój użytkownik dodaje w mojej aplikacji. Użytkownicy aplikacji będą szukać innych użytkowników za pomocą kryteriów w tych modelach.

Z jednej strony myślę, że jeśli dołączę bezpośrednio do użytkownika, to nie będę musiał wykonywać request.user.get_profile() za każdym razem, gdy będę musiał przechwytywać zapisy użytkownika, a to nie będzie zakładamy, że użytkownik zawsze ma profil (robią to w mojej aplikacji, ale nadal). Pozostawia model profilu jako zawierający jedynie dane kontaktowe użytkownika.

Z drugiej strony, wyobrażam sobie, że najprawdopodobniej będę potrzebował wartości z profilu (np. Imię i nazwisko, lokalizacja) podczas wyszukiwania innych modeli.

Bez wątpienia też zadziała, więc może to nie ma znaczenia, ale po prostu zastanawiałem się, jakie są myśli innych ludzi.

Dzięki!

Ludo.

Odpowiedz

1

Ogólnie: jeśli chcesz, aby Twoje aplikacje były ponownie używane, zawsze twórz klucze obce w Modelu użytkownika.

Jak już powiedziałeś, w większości przypadków będziesz potrzebować zarówno instancji użytkownika, jak i profilu, aby uniknąć wielu zapytań do bazy danych, użyj pamięci podręcznej.

Jeśli możliwość ponownego użycia nie jest istotna, utwórz klucz obcy w profilu i użyj metody select_related() w celu pobrania instancji użytkownika za pomocą pojedynczego zapytania.

2

Polecam również tworzenie kluczy obcych dla modelu użytkownika. Ułatwia to życie podczas pracy z obiektem użytkownika w widoku, dla jednego. Możesz więc robić rzeczy takie jak request.user.foo_set, itp. Bez konieczności przechodzenia przez model profilu.

+0

Nie uważałem tego. Dobra rada. – sleblanc

Powiązane problemy