Wsparcie dla agregacji w Django

10 komentarzy

Ten wpis dotyczy czegoś, co wydarzyło się tydzień temu (tak to jest, jak się nie przegląda na bieżąco rzeczy, które się dzieją w świecie). Otóż do najnowszego kodu Django zostało dodane wsparcie dla agregacji danych (commit: 9742).

Polega to na tym, że możemy wyciągnąć z bazy danych sumę, wartość minimalną, maksymalną czy też średnią z danej kolumnie bez używania SQL'a.

I tyle.

Dokumentacja do tego:
http://docs.djangoproject.com/en/dev/topics/db/aggregation/

Wszystkiego najlepszego wszystkim miłośnikom Django

Dodaj komentarz

Wesołych Świat Bożego Narodzenia,
oraz szczęśliwego Nowego Roku 2009

życzy,

zespół Taulab.

Podzielcie się z nami opłatkiem wchodząc na stronę: http://podzieloplatek.pl/TAULAB/. Zostawcie po sobie życzenia ;).

Python 3.0 wydany!

6 komentarzy

Dziś w nocy została wydana trzecia wersja języka Python. Gratulujemy wszystkim programistom, którzy przyczynili się do tego wydarzenia.

Informację o nowej wersji znajdziecie na http://www.python.org.pl/

Jak myślicie, kiedy Django przejdzie na nową wersję pythona? Czy będzie to najpierw 2.6, czy od razu 3.0?

Django.pl otwarte!

11 komentarzy

W końcu. Po tak długim czasie, strona django.pl doczekała się otwarcia. Strona ta ma skupiać polską społeczność Django, jak również promować tenże framework w naszym kraju. Obecnie na stronie znajduje się blog, część dokumentacji oraz agregator wpisów z polskich blogów o Django.

Plany co do przyszłych funkcjonalności serwisu są duże. Ja osobiście będę dążył do stworzenia sekcji ogłoszeń dla ludzi szukających zatrudnienia, szukających pracowników, a także ofert wykonania strony internetowej (taka sekcja bardziej reklamowa).

Całej ekipie tworzącej tę stronę należą się duże podziękowania, a w szczególności Dominikowi Szopie i Kacprowi Krupie, którzy całymi swoimi siłami w ostatnich dniach zrobili dziesiątki poprawek i otworzyli serwis.

Ogranicznie liczby elementów w selekcie

7 komentarzy

Formularze w Django to potężne narzędzie. Automatyzuje nam wiele ... i jeszcze wiecej. Początki posługiwania się nimi są trudne. Czasem więcej czasu zajmuje nauczenie się jak dana rzecz działa, niż ręczne napisanie tego po swojemu. Ale mimo wszystko warto poświęcić trochę czasu na kształcenie samego siebie, dzięki czemu potem możemy automatyzować pisanie kodu jeszcze bardziej.

Ostatnio natrafiłem na następujący problem. Mam oto takie dwa modele:

class User(models.Model):
        username = models.CharField( max_length=30 )
        profession = models.CharField( max_length=30 )


class Book(models.Model):
        title = models.CharField( max_length=10 )
        author = models.ForeignKey( User )

Jak widać, są użytkownicy i są książki. Książki mają swojego autora. Załóżmy jednak, że autorem książki może być tylko osoba, która jest z zawodu pisarzem. Tak więc, przy dodawaniu nowej książki, nie chcemy wyświetlić wszystkich użytkowników w selekcie do wyboru. Chcemy wyświetlić tylko tych którzy mają określony zawód pisarza.

Jak to zrobić najprostszym sposobem? Rozwiązanie jest łatwe, a nawet banalne. Zobaczmy:

class Book(models.Model):
        title = models.CharField( max_length=10 )
        author = models.ForeignKey( User, 
                 limit_choices_to={'profession' : 'writer'} )

Dodaliśmy dodatkowy atrybut limit_choices_to, gdzie podaliśmy listę asocjacyjną z informacją, co chcemy filtrować.

Ok, to rozważmy kolejny problem. Jak to zrobić, aby książki mogli pisać wszyscy poza programistami? W starym (bardzo starym) Django, można było użyć czegoś w stylu: profession__exclude. Teraz jest na to inne, dużo bardziej elastyczne rozwiązanie. Otóż można używać obiekt Q. Jak go używać, dowiecie się tutaj.

Korzystając z tego obiektu, nasze poprzednie wyrażenie zapiszemy tak:

author = models.ForeignKey( User, 
          limit_choices_to = Q( profession = 'writer') )

I teraz tylko wystarczy zrobić negację. Jak można przeczytać w dokumentacji do tego tajemniczego (czyli fajnego) obiektu, wykorzystujemy operatory bitowe. Czyli zamiast operatora "not" użyjemy operatora "~" (tylda). Tak więc nasz końcowy model będzie wyglądał następująco:

 
class Book(models.Model):
        title = models.CharField( max_length=10 )
        author = models.ForeignKey( User, 
                 limit_choices_to = ~Q(profession="programmer") )

No i teraz sprawa jest jasna. Dobrze wiedzieć, że takie coś istnieje.


Nasze projekty

  • ocenfotke.taulab.com
  • sobotnianoc.pl
  • plom.taulab.com
  • mines20.com
  • taulab.pl