Assembla home | Assembla project page
 

Changeset 49

Show
Ignore:
Timestamp:
04/21/08 22:07:50 (5 months ago)
Author:
elus
Message:

Skończone tłumaczenie pierwszej części tutoriala. Sory za opóźnienie :)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django-docs/tutorial01.txt

    r37 r49  
    1010Składa się on z dwóch części: 
    1111 
    12         * Publicznej - gdzie wyświetlane są ankiety i można na nie głosować. 
     12    * Publicznej - gdzie wyświetlane są ankiety i można na nie głosować.  
    1313    * Administracyjnej - która pozwala na dodawanie, edytowanie i usuwanie ankiet. 
    1414 
     
    2323 
    2424    Jeśli masz problemy podczas przerabiania tego tutoriala, możesz napisać  
    25        wiadomość na `django-users`_ lub dołączyć do kanału `#django`_ na serwerze 
    26        ``irc.freenode.net`` gdzie spróbujemy Ci pomóc. 
     25    wiadomość na `django-users`_ lub dołączyć do kanału `#django`_ na serwerze 
     26    ``irc.freenode.net`` gdzie spróbujemy Ci pomóc. 
    2727 
    2828.. _django-users: http://groups.google.com/group/django-users 
     
    5555 
    5656    Powinieneś unikać nazywania projektów nazwami wbudowanych w Pythona lub 
    57        nazwami komponentów Django. W szczególności oznacza to unikanie nazw takich 
    58        jak ``django`` (która będzie kolidować z samym Django) lub ``site`` (która 
     57    nazwami komponentów Django. W szczególności oznacza to unikanie nazw takich 
     58    jak ``django`` (która będzie kolidować z samym Django) lub ``site`` (która 
    5959    spowoduje konflikt z wbudowanym w Pythona pakietem). 
    6060 
     
    6969 
    7070    Jeśli w przeszłości programowałeś w PHP, najprawdopodobniej przywykłeś do 
    71        umieszczania swojego kodu w ``document root`` swojego serwera www (w miejscu 
    72        takim jak ``/var/www``). Z Django nie powinieneś tego robić. Nie jest dobrym 
    73        pomysłem umiejscawianie jakiegokolwiek kodu Pythona wewnątrz 
    74        ``document root``, ponieważ stwarza to zagrożenie możliwości oglądania 
    75        Twojego kodu przez odwiedzających. Nie jest do dobre ze względów 
    76        bezpieczeństwa. 
    77          
    78        Umieść swój kod w którymkolwiek katalogu **poza** ``document root``, w takim 
    79        jak np. ``/home/mycode``. 
     71    umieszczania swojego kodu w ``document root`` swojego serwera www (w miejscu 
     72    takim jak ``/var/www``). Z Django nie powinieneś tego robić. Nie jest dobrym 
     73    pomysłem umiejscawianie jakiegokolwiek kodu Pythona wewnątrz 
     74    ``document root``, ponieważ stwarza to zagrożenie możliwości oglądania 
     75    Twojego kodu przez odwiedzających. Nie jest do dobre ze względów 
     76    bezpieczeństwa. 
     77     
     78    Umieść swój kod w którymkolwiek katalogu **poza** ``document root``, w takim 
     79    jak np. ``/home/mycode``. 
    8080 
    8181Zobaczmy zatem co utworzył nam ``startproject``:: 
     
    9090 
    9191    * ``__init__.py``: Pusty plik informujący Pythona o tym, że katalog 
    92          nadrzędny powinien być traktowany jako pakiet Pythona (zobacz `więcej na 
    93          temat pakietów`_). 
     92      nadrzędny powinien być traktowany jako pakiet Pythona (zobacz `więcej na 
     93      temat pakietów`_). 
    9494    * ``manage.py``: Działające z linii poleceń narzędzie, które pozwala na 
    95          interakcję z projektem Django na różne sposoby. 
     95      interakcję z projektem Django na różne sposoby. 
    9696    * ``settings.py``: Ustawienia/konfiguracja dla tego projektu Django. 
    9797    * ``urls.py``: Deklaracja adresów URL dla tego projektu Django; "mapa 
    98          serwisu" Twojej zbudowanej w oparciu o Django strony. 
     98      serwisu" Twojej zbudowanej w oparciu o Django strony. 
    9999 
    100100.. _więcej na temat pakietów: http://docs.python.org/tut/node8.html#packages 
     
    131131 
    132132    Domyślnie polecenie ``runserver`` uruchamia serwer deweloperski na porcie 
    133        8000. Jeśli chcesz zmienić port serwera, prześlij jego wartość jako argument 
    134        przy wywołaniu z linii poleceń. Dla przykładu - to polecenie uruchamia 
    135        serwer na porcie 8080:: 
     133    8000. Jeśli chcesz zmienić port serwera, prześlij jego wartość jako argument 
     134    przy wywołaniu z linii poleceń. Dla przykładu - to polecenie uruchamia 
     135    serwer na porcie 8080:: 
    136136 
    137137        python manage.py runserver 8080 
    138138 
    139139    Pełna dokumentacja dla serwera deweloperskiego znajduje się na stronie 
    140        `dokumentacji panelu admina`_. 
    141          
    142 .. _dokumentacji panelu admina: ../django-admin/ 
     140    `dokumentacji panelu admina`_. 
     141 
     142.. _dokumentacji panelu admina: http://www.djangoproject.com/documentation/django-admin/ 
    143143 
    144144Ustawienia bazy danych 
     
    152152      Inne backendy są `również dostępne`_. 
    153153    * ``DATABASE_NAME`` -- Nazwa Twojej bazy danych, bądź absolutna ścieżka do 
    154          pliku bazy danych, jeśli używasz SQLite. 
     154      pliku bazy danych, jeśli używasz SQLite. 
    155155    * ``DATABASE_USER`` -- Nazwa użytkownika uprawnionego do połączenia z bazą 
    156          danych (nie używane w SQLite). 
     156      danych (nie używane w SQLite). 
    157157    * ``DATABASE_PASSWORD`` -- hasło dostępu do bazy danych (nie używane w 
    158           SQLite). 
    159        * ``DATABASE_HOST`` -- Adres serwera bazy danych. Możesz zostawić puste 
    160          jeśli serwer bazy danych znajduje się na tym samym komputerze co Twoja 
    161          aplikacja (nie używane w SQLite). 
    162           
    163 .. _również dostępne: ../settings/ 
     158       SQLite). 
     159    * ``DATABASE_HOST`` -- Adres serwera bazy danych. Możesz zostawić puste 
     160      jeśli serwer bazy danych znajduje się na tym samym komputerze co Twoja 
     161      aplikacja (nie używane w SQLite). 
     162       
     163.. _również dostępne: http://www.djangoproject.com/documentation/settings/ 
    164164 
    165165.. admonition:: Uwaga 
    166166 
    167167    Jeśli używasz MySQL lub PostgreSQL, upewnij się że stworzyłeś potrzebną bazę 
    168        danych. Możesz to wykonać poleceniem "``CREATE DATABASE database_name;``" 
    169        z wnętrza powłoki trybu aktywnego swojej bazy danych. 
     168    danych. Możesz to wykonać poleceniem "``CREATE DATABASE database_name;``" 
     169    z wnętrza powłoki trybu aktywnego swojej bazy danych. 
    170170 
    171171Edytując plik ``settings.py`` zwróć uwagę na ustawienia ``INSTALLED_APPS`` 
     
    182182    * ``django.contrib.sessions`` -- Framework sesji. 
    183183    * ``django.contrib.sites`` -- Framework do zarządzania wieloma stronami w 
    184          jednej instalacji Django. 
     184      jednej instalacji Django. 
    185185 
    186186Te aplikacje są dołączane domyślnie w ramach wygody dla powszechnych przypadków 
     
    194194Komenda ``syncdb`` patrzy na ustawienia ``INSTALLED_APPS`` i tworzy wszystkie 
    195195potrzebne tabele w bazie z uwzględnieniem ustawień odnośnie baz danych w Twoim 
    196 pliku ``settings.py`. Powinieneś zobaczyć informację o każdej utworzonej przez 
     196pliku ``settings.py``. Powinieneś zobaczyć informację o każdej utworzonej przez 
    197197niego tabeli i otrzymać zapytanie o utworzenie konta superużytkownika dla 
    198198systemu uwierzytelniania. Możesz śmiało na to się zgodzić. 
     
    204204.. admonition:: Dla minimalistów 
    205205 
    206        Jak wcześniej wspomnieliśmy, domyślne aplikacje są dołączone dla 
    207        najpowszechniejszych zastosowań, ale nie każdy ich potrzebuje. Jeśli nie 
    208        potrzebujesz którejś lub wszystkich możesz zwyczajnie je zakomentować lub 
    209        usunąć odpowiadające jej/im linie z ``INSTALLED_APPS`` przed uruchomieniem 
    210        ``syncdb``. Komenda ``syncdb`` utworzy jedynie tabele dla aplikacji 
    211        wymienionych w ``INSTALLED_APPS``. 
     206    Jak wcześniej wspomnieliśmy, domyślne aplikacje są dołączone dla 
     207    najpowszechniejszych zastosowań, ale nie każdy ich potrzebuje. Jeśli nie 
     208    potrzebujesz którejś lub wszystkich możesz zwyczajnie je zakomentować lub 
     209    usunąć odpowiadające jej/im linie z ``INSTALLED_APPS`` przed uruchomieniem 
     210    ``syncdb``. Komenda ``syncdb`` utworzy jedynie tabele dla aplikacji 
     211    wymienionych w ``INSTALLED_APPS``. 
    212212 
    213213Tworzenie modeli 
     
    231231 
    232232    Jaka jest różnica pomiędzy projektem a aplikacją? Aplikacja coś robi -- jest 
    233        nią np. system blogowy, rejestr danych publicznych lub prosta ankieta. 
    234        Projekt jest kolekcją konfiguracji i aplikacji dla określonej strony www. 
    235        Projekt może zawierać wiele aplikacji. Dana aplikacja może być w wielu 
    236        projektach. 
     233    nią np. system blogowy, rejestr danych publicznych lub prosta ankieta. 
     234    Projekt jest kolekcją konfiguracji i aplikacji dla określonej strony www. 
     235    Projekt może zawierać wiele aplikacji. Dana aplikacja może być w wielu 
     236    projektach. 
    237237 
    238238W tym tutorialu dla ułatwienia utworzymy aplikację ankiety w katalogu 
     
    302302 
    303303.. _dokumentację instalacyjną: ../install/ 
    304 .. _tutoriala dla Django 0.96: ../0.96/tutorial01/ 
     304.. _tutoriala dla Django 0.96:  
     305 
    305306 
    306307Kod jest samowyjaśniający się. Każdy model jest reprezentowany przez podklasę, 
     
    334335wiele-do-wielu (many-to-many) i jeden-do-jednego (one-to-one). 
    335336 
    336 .. _`Python path`: http://docs.python.org/tut/node8.html#SECTION008110000000000000000 
    337 .. _DRY Principle: http://c2.com/cgi/wiki?DontRepeatYourself 
     337.. _`ścieżce dostępu pythona`: http://docs.python.org/tut/node8.html#SECTION008110000000000000000 
     338.. _Regułą DRY: http://c2.com/cgi/wiki?DontRepeatYourself 
    338339 
    339340Aktywacja modeli 
     
    344345 
    345346    * Stworzyć strukturę bazy danych (wygenerować kwerendy ``CREATE TABLE``) 
    346          dla tworzonej aplikacji. 
     347      dla tworzonej aplikacji. 
    347348    * Stworzyć API dostępu do bazy danych dla obiektów Poll i Choice. 
    348349 
     
    352353.. admonition:: Filozofia 
    353354 
    354        Aplikcje Django są wtyczkami (pluginami): możesz używać ich w wielu 
    355        projektach, a także rozpowszechniać, ponieważ nie są one przypisane do 
    356        konkretnej instalacji Django. 
     355    Aplikcje Django są wtyczkami (pluginami): możesz używać ich w wielu 
     356    projektach, a także rozpowszechniać, ponieważ nie są one przypisane do 
     357    konkretnej instalacji Django. 
    357358 
    358359Wyedytuj ponownie plik ``settings.py``, i dopisz do ``INSTALLED_APPS`` 
     
    373374 
    374375Treaz powinieneś zobaczyć następujący ciąg poleceń CREATE TABLE dla Twojej 
    375 sondy:: 
     376ankiety:: 
    376377 
    377378    BEGIN; 
     
    394395 
    395396    * Nazwy tabel są generowane automatycznie poprzez kombinację nazwy aplikacji 
    396          (``polls``) i nazwy modelu zapisanej małymi literami -- ``poll`` i 
    397          ``choice`` (możesz zmienić to domyślne zachowanie). 
     397      (``polls``) i nazwy modelu zapisanej małymi literami -- ``poll`` i 
     398      ``choice`` (możesz zmienić to domyślne zachowanie). 
    398399 
    399400    * Klucze główne (ID) są dodawane automatycznie (aczkolwiek możesz to 
    400          zmienić). 
     401      zmienić). 
    401402 
    402403    * Django dodaje końcówkę ``"_id"`` do zazw pól kluczy obcych 
    403          (``ForeignKey``). Również to zachowanie możesz jednak zmienić. 
    404           
     404      (``ForeignKey``). Również to zachowanie możesz jednak zmienić. 
     405       
    405406    * Powiązania z użyciem kluczy obcych są tworzone poprzez deklarację  
    406          ``REFERENCES``. 
    407           
     407      ``REFERENCES``. 
     408       
    408409    * To jest ściśle powiązane z bazą danych której używasz, więc polecenia  
    409          takie jak ``auto_increment`` (MySQL), `serial` (PostgreSQL) lub 
    410          ``integer primary key`` (SQLite) specyficzne dla danego typu bazy są 
    411          ustawiane automatycznie. To samo dotyczy się cytowania nazw pół --  
    412          w zależności od bazy danych używa się pojedynczych bądź podwójnych 
    413          cudzysłowów. Autor tego wprowadzenia używa PostgreSQL, tak więc przykłady 
    414          są napisane dla tej bazy. 
     410      takie jak ``auto_increment`` (MySQL), `serial` (PostgreSQL) lub 
     411      ``integer primary key`` (SQLite) specyficzne dla danego typu bazy są 
     412      ustawiane automatycznie. To samo dotyczy się cytowania nazw pół --  
     413      w zależności od bazy danych używa się pojedynczych bądź podwójnych 
     414      cudzysłowów. Autor tego wprowadzenia używa PostgreSQL, tak więc przykłady 
     415      są napisane dla tej bazy. 
    415416 
    416417    * Komenda ``sql`` nie wykonuje zapytań SQL na twoje bazie danych - jedynie 
    417          drukuje je na ekranie byś mógł zobaczyć jaki SQL Django uważa na wymagany. 
    418          Jeśli chcesz, możesz skopiować i wkleić ten fragment kodu SQL na wejście 
    419          trybu interaktywnego swojej bazy danych. Jednakże, jak wkrótce zobaczymy, 
    420          Django zapewnia prostą metodę zatwierdzania tego SQL-a do Twojej bazy 
    421          danych. 
     418      drukuje je na ekranie byś mógł zobaczyć jaki SQL Django uważa na wymagany. 
     419      Jeśli chcesz, możesz skopiować i wkleić ten fragment kodu SQL na wejście 
     420      trybu interaktywnego swojej bazy danych. Jednakże, jak wkrótce zobaczymy, 
     421      Django zapewnia prostą metodę zatwierdzania tego SQL-a do Twojej bazy 
     422      danych. 
    422423 
    423424Jeśli jesteś zainteresowany, możesz także uruchomić poniższe komendy: 
    424425    * ``python manage.py validate`` -- Sprawdza Twój model w poszukiwaniu  
    425          jakichkolwiek błędów konstrukcyjnych. 
    426           
     426      jakichkolwiek błędów konstrukcyjnych. 
     427       
    427428    * ``python manage.py sqlcustom polls`` -- Wypisuje wszelkie własne zapytania 
    428          SQL (takie jak modyfikacja tabeli lub ograniczenia (ang. constraints)) 
    429          które są definiowane przez aplikacje. 
     429      SQL (takie jak modyfikacja tabeli lub ograniczenia (ang. constraints)) 
     430      które są definiowane przez aplikacje. 
    430431 
    431432    * ``python manage.py sqlclear polls`` -- Wypisuje wymagane wyrażenia 
    432          ``DROP TABLE`` dla tej aplikacji, biorąc pod uwagę aktualnie istniejące 
    433          tabele w Twojej bazie danych (jeśli takowe istnieją). 
     433      ``DROP TABLE`` dla tej aplikacji, biorąc pod uwagę aktualnie istniejące 
     434      tabele w Twojej bazie danych (jeśli takowe istnieją). 
    434435 
    435436    * ``python manage.py sqlindexes polls`` -- Wypisuje wyrażenie  
    436          ``CREATE INDEX`` dla tej aplikacji. 
     437      ``CREATE INDEX`` dla tej aplikacji. 
    437438 
    438439    * ``python manage.py sqlall polls`` -- Kombinacja wszystkich wyjściowych  
    439          wartości wyrażeń SQL z poleceń 'sql', 'sqlcustom' i 'sqlindexes'.  
     440      wartości wyrażeń SQL z poleceń 'sql', 'sqlcustom' i 'sqlindexes'.  
    440441 
    441442Przejrzenie wyników powyższych komend pomoże Ci zrozumieć, co się dzieje 
     
    459460możliwościach ``manage.py``. 
    460461 
    461 .. _dokumentację django-admin.py: ../django-admin/ 
     462.. _`dokumentację django-admin.py`: http://www.djangoproject.com/documentation/settings/django-admin/ 
    462463 
    463464Zabawy z  API 
     
    473474 
    474475    * Dodaniu ``mysite`` do ``sys.path``. Dla elastyczności, kilka fragmentów 
    475          Django odnosi się do projektów w Pythonie stosując notację z kropką 
    476          (np. ``'mysite.polls.models'``). W związku z tym pakiet ``mysite`` musi 
    477          znajdować się w ``system.path``. 
    478          
     476      Django odnosi się do projektów w Pythonie stosując notację z kropką 
     477      (np. ``'mysite.polls.models'``). W związku z tym pakiet ``mysite`` musi 
     478      znajdować się w ``system.path``. 
     479     
    479480      Niedawno widzieliśmy przykład takiego użycia: ``INSTALLED APPS`` 
    480          przechowuje listę pakietów we wspomnianej notacji z kropką. 
     481      przechowuje listę pakietów we wspomnianej notacji z kropką. 
    481482 
    482483    * Ustawieniu zmiennej ``DJANGO_SETTINGS_MODULE``, która zapewnia Django 
    483          ścieżkę do Twojego pliku ``settings.py``. 
    484           
     484      ścieżkę do Twojego pliku ``settings.py``. 
     485       
    485486.. admonition:: Praca bez wykorzystania manage.py 
    486487 
    487488    Jeśli nie chcesz używać ``manage.py`` nie ma problemu. Po prostu upewnij 
    488        się, że ``mysite`` na głównym poziomie ścieżki dostępu Pythona 
    489        (``import mysite`` działa) i ustawia zmiennej środowiskowej 
    490        ``DJANGO_SETTINGS_MODULE`` wartość ``mysite.settings``. 
    491          
     489    się, że ``mysite`` na głównym poziomie ścieżki dostępu Pythona 
     490    (``import mysite`` działa) i ustawia zmiennej środowiskowej 
     491    ``DJANGO_SETTINGS_MODULE`` wartość ``mysite.settings``. 
     492     
    492493    W celu uzyskania większej ilości informacji zobacz 
    493        `dokumentację django-admin,py`_. 
     494    `dokumentację django-admin.py`_. 
    494495 
    495496Gdy już będziesz w shellu zbadaj API bazy danych:: 
     
    510511 
    511512    # Teraz ma on swoje ID. Zauważ, że może ono mieć wartość "1L" zamiast "1", 
    512        # w zależności od tego jakiej bazy danych używasz. To jednak drobnostka; 
    513        # oznacza to jedynie tyle, że Twoja baza danych woli zwracać typ integer 
    514        # jako obiekt long integer Pythona. 
     513    # w zależności od tego jakiej bazy danych używasz. To jednak drobnostka; 
     514    # oznacza to jedynie tyle, że Twoja baza danych woli zwracać typ integer 
     515    # jako obiekt long integer Pythona. 
    515516    >>> p.id 
    516517    1 
     
    569570 
    570571    Jeśli jesteś obeznany z Pythonem, możesz mieć nawyk dodawania do swoich klas 
    571         metody ``__str__()`` a nie ``__unicode__()``. Używamy ``__unicode__()`` 
    572         ponieważ modele Django mają domyślnie do czynienia z unikodem. Wszelkie dane 
    573         trzymane w twojej bazie danych są konwertowane do unikodu zaraz po 
    574         ich wyciągnięciu. 
    575          
    576         Domyślna metoda ``__str__()`` modeli Django wywołuje ``__unicode__()`` i 
    577         konwertuje rezultat na bytestringa UTF-8. Oznacza to, że ``unicode(p)`` 
    578         zwraca ciąg znaków Unicode, zaś ``str(p)`` zwraca normalny ciąg znaków z 
    579         kodowany jako UTF-8. 
    580  
    581     If all of this is jibberish to you, just remember to add ``__unicode__()`` 
    582     methods to your models. With any luck, things should Just Work for you. 
    583  
    584 Note these are normal Python methods. Let's add a custom method, just for 
    585 demonstration:: 
     572    metody ``__str__()`` a nie ``__unicode__()``. Używamy ``__unicode__()`` 
     573    ponieważ modele Django mają domyślnie do czynienia z unikodem. Wszelkie dane 
     574    trzymane w twojej bazie danych są konwertowane do unikodu zaraz po 
     575    ich wyciągnięciu. 
     576     
     577    Domyślna metoda ``__str__()`` modeli Django wywołuje ``__unicode__()`` i 
     578    konwertuje rezultat na bytestringa UTF-8. Oznacza to, że ``unicode(p)`` 
     579    zwraca ciąg znaków Unicode, zaś ``str(p)`` zwraca normalny ciąg znaków z 
     580    kodowany jako UTF-8. 
     581 
     582    Jeśli wszystko co zostało wcześniej napisane nie ma dla Ciebie większego 
     583    sensu, po prostu pamiętaj dodać do swoich modeli metodę ``__unicode__()``. 
     584    Z odrobiną szczęścia wszystko powinno po prostu działać. 
     585 
     586Zwróć uwagę, że są to zwykłe metody Pythona. Dla celów demonstracyjnych dodajmy 
     587własną metodę:: 
    586588 
    587589    import datetime 
     
    592594            return self.pub_date.date() == datetime.date.today() 
    593595 
    594 Note the addition of ``import datetime`` to reference Python's standard 
    595 ``datetime`` module
    596  
    597 Let's jump back into the Python interactive shell by running 
    598 ``python manage.py shell`` again:: 
     596Zauważ, że dodatkowa linia ``import datetime`` odnosi się do standardowego 
     597modułu Pythona ``datetime``
     598 
     599Przejdźmy z powrotem do interaktywnej powłoki Pythona uruchamiając ponownie 
     600``python manage.py shell``:: 
    599601 
    600602    >>> from mysite.polls.models import Poll, Choice 
    601603 
    602     # Make sure our __unicode__() addition worked
     604    # Upewnij się że dodana przez nas metoda __unicode__() działa
    603605    >>> Poll.objects.all() 
    604     [<Poll: What's up?>] 
    605  
    606     # Django provides a rich database lookup API that's entirely driven by 
    607     # keyword arguments. 
     606    [<Poll: Jak leci?>] 
     607 
     608    # Django zapewnia bogate API bazy danych, które w całości napędzane jest 
     609    # nazywanymi argumentami 
    608610    >>> Poll.objects.filter(id=1) 
    609     [<Poll: What's up?>] 
    610     >>> Poll.objects.filter(question__startswith='What') 
    611     [<Poll: What's up?>] 
    612  
    613     # Get the poll whose year is 2007. Of course, if you're going through this 
    614     # tutorial in another year, change as appropriate. 
     611    [<Poll: Jak leci?>] 
     612    >>> Poll.objects.filter(question__startswith='Jak') 
     613    [<Poll: Jak leci?>] 
     614 
     615    # Pobierz ankietę, której rok wynosi 2007. Oczywiście jeśli wcześniej 
     616    # w trakcie tego tutoriala wybrałeś inną datę, powinieneś w tym momencie 
     617    # wprowadzić odpowiednią wartość. 
    615618    >>> Poll.objects.get(pub_date__year=2007) 
    616     <Poll: What's up?> 
     619    <Poll: Jak leci?> 
    617620 
    618621    >>> Poll.objects.get(id=2) 
     
    621624    DoesNotExist: Poll matching query does not exist. 
    622625 
    623     # Lookup by a primary key is the most common case, so Django provides a 
    624     # shortcut for primary-key exact lookups. 
    625     # The following is identical to Poll.objects.get(id=1). 
     626    # Poszukiwanie obiektu na podstawie wartości klucza głównego jest 
     627    # najczęściej stosowanym przypadkiem, dlatego Django zapewnia odpowiednią 
     628    # metodę. 
     629    # Poniższe jest identyczne z Poll.objects.get(id=1). 
    626630    >>> Poll.objects.get(pk=1) 
    627     <Poll: What's up?> 
    628  
    629     # Make sure our custom method worked
     631    <Poll: Jak leci?> 
     632 
     633    # Upewnij się że zdefiniowana przez Ciebie metoda działa
    630634    >>> p = Poll.objects.get(pk=1) 
    631635    >>> p.was_published_today() 
    632636    False 
    633637 
    634     # Give the Poll a couple of Choices. The create call constructs a new 
    635     # choice object, does the INSERT statement, adds the choice to the set 
    636     # of available choices and returns the new Choice object. 
     638    # Dołącz do ankiety (Poll) kilka odpowiedzi (Choices). Wywołanie 
     639    # konstruktora tworzy nowy obiekt odpowiedzi, wykonuje polecenie INSERT, 
     640    # dodaje odpowiedź do listy dostępnych odpowiedzi i zwraca nowy obiekt 
     641    # odpowiedzi (Choice). 
    637642    >>> p = Poll.objects.get(pk=1) 
    638     >>> p.choice_set.create(choice='Not much', votes=0) 
    639     <Choice: Not much> 
    640     >>> p.choice_set.create(choice='The sky', votes=0) 
    641     <Choice: The sky> 
    642     >>> c = p.choice_set.create(choice='Just hacking again', votes=0) 
    643  
    644     # Choice objects have API access to their related Poll objects. 
     643    >>> p.choice_set.create(choice='Specjalnie nic nowego', votes=0) 
     644    <Choice: Specjalnie nic nowego> 
     645    >>> p.choice_set.create(choice='Ciurkiem', votes=0) 
     646    <Choice: Ciurkiem> 
     647    >>> c = p.choice_set.create(choice='Znowu programuję', votes=0) 
     648 
     649    # Obiekty wyboru (Choice) posiadają API zapewniające dostęp do związanych 
     650    # z nimi obiektami ankiety (Polls). 
    645651    >>> c.poll 
    646     <Poll: What's up?> 
    647  
    648     # And vice versa: Poll objects get access to Choice objects
     652    <Poll: Jak leci?> 
     653 
     654    # I odwrotnie: obiekty Poll posiadają dostęp do obiektów Choice
    649655    >>> p.choice_set.all() 
    650     [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>] 
     656    [<Choice: Specjalnie nic nowego>, <Choice: Ciurkiem>, <Choice: Znowu programuję>] 
    651657    >>> p.choice_set.count() 
    652658    3 
    653659 
    654     # The API automatically follows relationships as far as you need. 
    655     # Use double underscores to separate relationships. 
    656     # This works as many levels deep as you want; there's no limit. 
    657     # Find all Choices for any poll whose pub_date is in 2007. 
     660    # Omawiane API automatycznie podąża za relacjami tak daleko jak tego 
     661    # potrzebujesz. Użyj podwójnego podkreślnika by oddzielić powiązania. 
     662    # Działa to dla tylu poziomów głębokości dla ilu chcesz - nie ma limitu. 
     663    # Znajdź wszystkie Odpowiedzi (Choices) dla każdej ankiety opublikowanej 
     664    # w roku 2007. 
    658665    >>> Choice.objects.filter(poll__pub_date__year=2007) 
    659     [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>] 
    660  
    661     # Let's delete one of the choices. Use delete() for that
    662     >>> c = p.choice_set.filter(choice__startswith='Just hacking') 
     666    [<Choice: Specjalnie nic nowego>, <Choice: Ciurkiem>, <Choice: Znowu programuję>] 
     667 
     668    # Usuń jedną z odpowiedzi. Użyj delete() aby tego dokonać
     669    >>> c = p.choice_set.filter(choice__startswith='Znowu program') 
    663670    >>> c.delete() 
    664671 
    665 For full details on the database API, see our `Database API reference`_. 
    666  
    667 When you're comfortable with the API, read `part 2 of this tutorial`_ to get 
    668 Django's automatic admin working. 
    669  
    670 .. _Database API reference: ../db-api/ 
    671 .. _part 2 of this tutorial: ../tutorial02/ 
     672By uzyskać więcej informacji na temat API do baz danych zobacz 
     673`dokumentację API do baz danych`_ 
     674 
     675Gdy już będziesz czuł się komfortowo używając wspomnianego wcześniej API, 
     676przeczytaj `część 2 tego tutoriala`_ aby dodać automatyczny panel admina. 
     677 
     678.. _dokumentację API do baz danych: ../db-api/ 
     679.. _część 2 tego tutoriala: ../tutorial02/