Wpis z mikrobloga

#naukaprogramowania #python #django
Mam taką zagwozdkę mirki. Rozwiązanie jest zapewne banalne, ale nie mam pomysłu, jak do tego podejść.
Chciałbym, aby każdy użytkownik po rejestracji otrzymywał wydzielone dla siebie 2 tabele (jeśli nie mam jakichś błędów w rozumowaniu, to można je utożsamić z modelami). Każda para będzie identyczna dla każdego użytkownika (będzie zawierać te same pola), różnica polegałaby tylko na nazwie (n.p. dodanym id po nazwie modelu).

Jest na to jakiś sposób? Jak na razie odgrzebałem na SO dynamiczne tworzenie modeli, ale tam nawet pola są zmienne.
Jakimś rozwiązaniem byłoby też dodanie w tych dwu modelach obcego klucza w postaci id użytkownika do każdego rekordu, ale to wydaje się nieco brutalne.

Jakieś rady? Dzięki z góry ( ͡° ͜ʖ ͡°)
  • 33
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

ale przy naprawdę dużej bazie

@Fitoplankton: zdefiniuj „naprawdę duża baza”, bo kilka milionów rekordów to jest mało. My mamy takie z kilkoma miliardami bez partycjonowania i to działa (cudem). Choć musieliśmy tune'ować mocno i dodatkowe indeksy zakładać o których developerzy Baculi nie pomyśleli. A i indeksy w tej bazie zajmują więcej niż same dane (/var/lib/mysql 450G z czego 150-200G to dane) :P
  • Odpowiedz
@morsik: zależy czy to w ogóle chwyci, target to głównie kościelni/proboszczowie also :P Przy pomyślnych wiatrach baza z czytającymi miałaby z 1000 rekordów, a w tej z historią przyrastałoby ok 200 miesięcznie (przy czym co rok czystka nie była by problemem). Więc teraz widzę, że to śmieszna ilość ( ͡° ͜ʖ ͡°)
  • Odpowiedz
@Fitoplankton: jest to możliwe ale jestem pewien, że nie potrzebujesz tworzenia dynamicznych tabel unikalnych dla użytkowników. Założenia jest to słabe. Pomyśl ile zapytań będziesz (a właściwie ORM) musiał wykonać do wyciągnięcia danych dla kilku użytkowników. Straszna rzecz...

Proponuję Ci zrobić relację jeden-do-jednego (OneToOneField - https://docs.djangoproject.com/en/1.8/topics/db/examples/one_to_one/) do djangowego modelu User (https://docs.djangoproject.com/en/1.8/topics/auth/default/#user-objects) w obu Twoich modelach. Czyli sprowadza się to do:

from django.contrib.auth.models
  • Odpowiedz
@gofr: coś takiego właśnie stworzyłem już samodzielnie grzebiąc w docach :). W sumie to dosyć spore te modele mi powychodziły, bo sporo relacji między nimi jest (też doszły domyślne wartości, related_names z uwagi na konflikty dla odwróconych odwołań). Całkiem sporo się nauczyłem na tym. Nie wspominając, że cały dzień tuningowałem projekt, żeby logowanie i autoryzację widoków porobić :P. To całkiem trudne za pierwszym razem, szczególnie kiedy nie można się już
  • Odpowiedz
@Fitoplankton: o, to super! Co do trudności - no tak, żeby zrobić coś naprawdę dobrego potrzeba doświadczenia. No ale bez spiny - czytaj i dużo pisz.
Polecam czytać dokumentację w wolnych chwilach. Jest naprawdę solidnie przygotowana. Django ma też dobre community - rzadko zdarza się, że po wpisaniu pytania w google nie ma żadnych sensownych wyników. Poza tym warto zaglądać w sam kod źródłowy Django, żeby dowiedzieć się jak co
  • Odpowiedz
@gofr: co do dokumentacji zdecydowanie się zgadzam, wszystko na tacy ( ͡° ͜ʖ ͡°). Do kodzenia używam PyCharma, który przy przeciążaniu klas oferuje odwołanie do klasy/metody matki, również przyjemne. No i z pisaniem też się zgadzam - same tutoriale są bez sensu. Nikt w tutku nie zapomni np. dodać $ przy urlpatterns :P

A pozycje wyglądają naprawdę spoko - dodam do zakładek. Przy czym na razie
  • Odpowiedz