{"title":"Modele","version":"2.0","locale":"pl","docname":"topics/db/models","url":"/pl/2.0/topics/db/models/","canonical":"https://djangodocs.dev/pl/2.0/topics/db/models/","summary":"Model to pojedyncze, pełne źródło danych o twoich danych. Zawiera podstawowe pola i zachowania danych, które przechowujesz.","html":"<span id=\"models\"></span><h1>Modele<a class=\"heading-anchor\" href=\"#module-django.db.models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Model to pojedyncze, pełne źródło danych o twoich danych. Zawiera podstawowe pola i zachowania danych, które przechowujesz. Zazwyczaj każdy model odpowiada jednej tabeli w bazie danych.</p>\n<p>Podstawy:</p>\n<ul class=\"simple\">\n<li><p>Każdy model to klasa Pythona, która dziedziczy po <a class=\"reference internal\" href=\"/pl/2.0/ref/models/instances/#django.db.models.Model\" title=\"django.db.models.Model\"><code class=\"xref py py-class docutils literal notranslate\">django.db.models.Model</code></a>.</p></li>\n<li><p>Każdy atrybut modelu reprezentuje pole w tabeli.</p></li>\n<li><p>Z tymi rzeczami Django daje ci automatycznie wygenerowane API dostępu do bazy danych; patrz <a class=\"reference internal\" href=\"/pl/2.0/topics/db/queries/\"><span class=\"doc\">Making queries</span></a>.</p></li>\n</ul>\n<section id=\"quick-example\">\n<h2>Szybki przykład<a class=\"heading-anchor\" href=\"#quick-example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ten przykładowy model definiuję klasę <code class=\"docutils literal notranslate\">Person</code>, która ma <code class=\"docutils literal notranslate\">first_name</code> i <code class=\"docutils literal notranslate\">last_name</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"k\">class</span> <span class=\"nc\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    first_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    last_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">first_name</code> i <code class=\"docutils literal notranslate\">last_name</code> są <a class=\"reference internal\" href=\"#fields\">polami</a> modelu. Każde pole jest podane jako atrybut klasy a każdemu atrybutowi odpowiada kolumna w bazie danych.</p>\n<p>Powyższy model <code class=\"docutils literal notranslate\">Person</code> stworzyłby taką tabelę w bazie danych:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">CREATE</span> <span class=\"k\">TABLE</span> myapp_person <span class=\"p\">(</span>\n    <span class=\"ss\">&quot;id&quot;</span> <span class=\"nb\">serial</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span> <span class=\"k\">PRIMARY</span> <span class=\"k\">KEY</span><span class=\"p\">,</span>\n    <span class=\"ss\">&quot;first_name&quot;</span> <span class=\"nb\">varchar</span><span class=\"p\">(</span><span class=\"mi\">30</span><span class=\"p\">)</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span><span class=\"p\">,</span>\n    <span class=\"ss\">&quot;last_name&quot;</span> <span class=\"nb\">varchar</span><span class=\"p\">(</span><span class=\"mi\">30</span><span class=\"p\">)</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span>\n<span class=\"p\">);</span>\n</code></pre></div>\n<p>Kilka technicznych uwag:</p>\n<ul class=\"simple\">\n<li><p>Nazwa tabeli w sposób automatyczny pochodzi od meta-danych modelu, ale może zostać nadpisana. Więcej szczegółów w artykule <a class=\"reference internal\" href=\"/pl/2.0/ref/models/options/#table-names\"><span class=\"std std-ref\">Table names</span></a>.</p></li>\n<li><p>Pole <code class=\"docutils literal notranslate\">id</code> jest dodawane automatycznie, ale to zachowanie może zostać nadpisane. Patrz <a class=\"reference internal\" href=\"#automatic-primary-key-fields\"><span class=\"std std-ref\">Automatyczne pola klucza głównego</span></a>.</p></li>\n<li><p>SQL <code class=\"docutils literal notranslate\">CREATE TABLE</code> w tym przykładzie jest sformatowany przy użyciu składni PostgreSQL, ale warto zauważyć, że Django używa SQL-a dostosowanego do backendu bazy danych podanego w twoim <a class=\"reference internal\" href=\"/pl/2.0/topics/settings/\"><span class=\"doc\">pliku ustawień</span></a>.</p></li>\n</ul>\n</section>\n<section id=\"using-models\">\n<h2>Używanie modeli<a class=\"heading-anchor\" href=\"#using-models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Kiedy zdefiniowałeś już swoje modele, musisz powiedzieć Django, że chcesz ich <em>użyć</em>. Zrób to edytując swój plik ustawień i dodając do ustawienia <a class=\"reference internal\" href=\"/pl/2.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> nazwę modułu, który zawiera twoje <code class=\"docutils literal notranslate\">models.py</code>.</p>\n<p>Na przykład jeśli moduły dla twojej aplikacji żyją w module <code class=\"docutils literal notranslate\">myapp.models</code> (struktura pakietu, która jest stworzona dla aplikacji przez skrypt <a class=\"reference internal\" href=\"/pl/2.0/ref/django-admin/#django-admin-startapp\"><code class=\"xref std std-djadmin docutils literal notranslate\">manage.py startapp</code></a>), częściowo <a class=\"reference internal\" href=\"/pl/2.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> powinno wyglądać tak:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>INSTALLED_APPS <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"c1\">#...</span>\n    <span class=\"s1\">&#39;myapp&#39;</span><span class=\"p\">,</span>\n    <span class=\"c1\">#...</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Gdy dodajesz nowe aplikacje do <a class=\"reference internal\" href=\"/pl/2.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>, nie zapomnij uruchomić <a class=\"reference internal\" href=\"/pl/2.0/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">manage.py migrate</code></a>, opcjonalnie robiąc wcześniej dla nich migracje przy użyciu <a class=\"reference internal\" href=\"/pl/2.0/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\">manage.py makemigrations</code></a>.</p>\n</section>\n<section id=\"fields\">\n<h2>Pola<a class=\"heading-anchor\" href=\"#fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Najważniejszą częścią modelu – i jedyną wymaganą jego częścią – jest lista pól w bazie danych, które określa. Pola są określone przez atrybuty klasowe. Uważaj, aby nie wybrać nazw pól, które są w konflikcie z <a class=\"reference internal\" href=\"/pl/2.0/ref/models/instances/\"><span class=\"doc\">API modeli</span></a> takich jak <code class=\"docutils literal notranslate\">clean</code>, <code class=\"docutils literal notranslate\">save</code> lub <code class=\"docutils literal notranslate\">delete</code>.</p>\n<p>Przykład:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"k\">class</span> <span class=\"nc\">Musician</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    first_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    last_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    instrument <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">Album</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    artist <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>Musician<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    release_date <span class=\"o\">=</span> models<span class=\"o\">.</span>DateField<span class=\"p\">()</span>\n    num_stars <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">()</span>\n</code></pre></div>\n<section id=\"field-types\">\n<h3>Typy pól<a class=\"heading-anchor\" href=\"#field-types\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Każde pole twojego modelu powinno być instancją odpowiedniej klasy <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\">Field</code></a>. Django używa typów klas pól, aby określić kilka rzeczy:</p>\n<ul class=\"simple\">\n<li><p>Rodzaj kolumny, który mówi bazie danych jaki rodzaj danych ma przechowywać (na przykład <code class=\"docutils literal notranslate\">INTEGER</code>, <code class=\"docutils literal notranslate\">VARCHAR</code>, <code class=\"docutils literal notranslate\">TEXT</code>).</p></li>\n<li><p>Domyślny HTML-owy <a class=\"reference internal\" href=\"/pl/2.0/ref/forms/widgets/\"><span class=\"doc\">widżet</span></a> używany przy renderowaniu pola formularza (na przykład <code class=\"docutils literal notranslate\">&lt;input type=&quot;text&quot;&gt;</code>, <code class=\"docutils literal notranslate\">&lt;select&gt;</code>).</p></li>\n<li><p>Minimalne wymagania walidacji, używane w panelu administracyjnym Django i w automatycznie generowanych formularzach.</p></li>\n</ul>\n<p>W Django są tuziny wbudowanych typów pól; pełną ich listę możesz znaleźć w <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#model-field-types\"><span class=\"std std-ref\">dokumentacji pól modeli</span></a>. W prosty sposób możesz dopisać swoje własne pola, jeśli te domyślne Django nie wystarczają; patrz <a class=\"reference internal\" href=\"/pl/2.0/howto/custom-model-fields/\"><span class=\"doc\">Writing custom model fields</span></a>.</p>\n</section>\n<section id=\"field-options\">\n<h3>Opcje pól<a class=\"heading-anchor\" href=\"#field-options\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Każde pole przyjmuje określony zestaw argumentów właściwych dla pola (udokumentowanych w <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#model-field-types\"><span class=\"std std-ref\">dokumentacji pól modeli</span></a>). Na przykład <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\">CharField</code></a> (i jego podklasy) wymagają podania argumentu <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.CharField.max_length\" title=\"django.db.models.CharField.max_length\"><code class=\"xref py py-attr docutils literal notranslate\">max_length</code></a>, który określa rozmiar pola <code class=\"docutils literal notranslate\">VARCHAR</code> w bazie danych używanego do przechowywania danych.</p>\n<p>Jest też zestaw wspólnych argumentów dostępnych dla wszystkich typów pól. Wszystkie są opcjonalne. Są w pełni objaśnione w <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#common-model-field-options\"><span class=\"std std-ref\">dokumentacji</span></a>, ale tu umieszczamy szybkie podsumowanie najczęściej używanych:</p>\n<dl>\n<dt><a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field.null\" title=\"django.db.models.Field.null\"><code class=\"xref py py-attr docutils literal notranslate\">null</code></a></dt><dd><p>Jeśli ma wartość <code class=\"docutils literal notranslate\">True</code>, Django będzie przechowywał puste wartości jako <code class=\"docutils literal notranslate\">NULL</code> w bazie danych. Domyślnie ma wartość <code class=\"docutils literal notranslate\">False</code>.</p>\n</dd>\n<dt><a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field.blank\" title=\"django.db.models.Field.blank\"><code class=\"xref py py-attr docutils literal notranslate\">blank</code></a></dt><dd><p>Jeśli ma wartość <code class=\"docutils literal notranslate\">True</code>, pole może być puste. Domyślnie ma wartość <code class=\"docutils literal notranslate\">False</code>.</p>\n<p>Zwróć uwagę, że to co innego niż <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field.null\" title=\"django.db.models.Field.null\"><code class=\"xref py py-attr docutils literal notranslate\">null</code></a>. <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field.null\" title=\"django.db.models.Field.null\"><code class=\"xref py py-attr docutils literal notranslate\">null</code></a> jest związany czysto z bazą danych, podczas gdy <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field.blank\" title=\"django.db.models.Field.blank\"><code class=\"xref py py-attr docutils literal notranslate\">blank</code></a> jest związany z walidacją. Jeśli pole ma <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field.blank\" title=\"django.db.models.Field.blank\"><code class=\"xref py py-attr docutils literal notranslate\">blank=True</code></a>, walidacja formularza pozwoli na wpis z pustą wartością. Jeśli pole ma <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field.blank\" title=\"django.db.models.Field.blank\"><code class=\"xref py py-attr docutils literal notranslate\">blank=False</code></a>, pole będzie wymagane.</p>\n</dd>\n<dt><a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field.choices\" title=\"django.db.models.Field.choices\"><code class=\"xref py py-attr docutils literal notranslate\">choices</code></a></dt><dd><p>Typ iterowalny (na przykład lista lub krotka) 2-krotek do użycia jako lista wyborów dla tego pola. Jeśli jest podany, domyślnym widżetem pola formularza będzie select box zamiast standardowego pola tekstowego i będzie ograniczał wybory do podanych opcji.</p>\n<p>Lista wyborów wygląda w ten sposób:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>YEAR_IN_SCHOOL_CHOICES <span class=\"o\">=</span> <span class=\"p\">(</span>\n    <span class=\"p\">(</span><span class=\"s1\">&#39;FR&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Freshman&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">(</span><span class=\"s1\">&#39;SO&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Sophomore&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">(</span><span class=\"s1\">&#39;JR&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Junior&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">(</span><span class=\"s1\">&#39;SR&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Senior&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">(</span><span class=\"s1\">&#39;GR&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Graduate&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>Pierwszy element każdej krotki jest wartością, która będzie przechowywana w bazie danych. Drugi element jest wyświetlany przez widżet formularza pola.</p>\n<p>Mając instancję modelu, dostęp do wartości wyświetlanej z <code class=\"docutils literal notranslate\">choices</code> można uzyskać korzystając z metody <a class=\"reference internal\" href=\"/pl/2.0/ref/models/instances/#django.db.models.Model.get_FOO_display\" title=\"django.db.models.Model.get_FOO_display\"><code class=\"xref py py-meth docutils literal notranslate\">get_FOO_display()</code></a>. Na przykład:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"k\">class</span> <span class=\"nc\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    SHIRT_SIZES <span class=\"o\">=</span> <span class=\"p\">(</span>\n        <span class=\"p\">(</span><span class=\"s1\">&#39;S&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Small&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">(</span><span class=\"s1\">&#39;M&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Medium&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">(</span><span class=\"s1\">&#39;L&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Large&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">)</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">60</span><span class=\"p\">)</span>\n    shirt_size <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> choices<span class=\"o\">=</span>SHIRT_SIZES<span class=\"p\">)</span>\n</code></pre></div>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>p <span class=\"o\">=</span> Person<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Fred Flintstone&quot;</span><span class=\"p\">,</span> shirt_size<span class=\"o\">=</span><span class=\"s2\">&quot;L&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p<span class=\"o\">.</span>save<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p<span class=\"o\">.</span>shirt_size\n<span class=\"go\">&#39;L&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p<span class=\"o\">.</span>get_shirt_size_display<span class=\"p\">()</span>\n<span class=\"go\">&#39;Large&#39;</span>\n</code></pre></div>\n</dd>\n<dt><a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field.default\" title=\"django.db.models.Field.default\"><code class=\"xref py py-attr docutils literal notranslate\">default</code></a></dt><dd><p>Domyślna wartość dla pola. Może to być wartość lub obiekt wywoływalny. Jeśli to obiekt wywoływalny, będzie wywoływany za każdym razem, gdy tworzony będzie nowy obiekt.</p>\n</dd>\n<dt><a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field.help_text\" title=\"django.db.models.Field.help_text\"><code class=\"xref py py-attr docutils literal notranslate\">help_text</code></a></dt><dd><p>Dodatkowe pole „pomocy” do wyświetlenia przy widżecie formularza. Jest pomocne jako dokumentacja nawet jeśli twoje pole nie jest używane w formularzu.</p>\n</dd>\n<dt><a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field.primary_key\" title=\"django.db.models.Field.primary_key\"><code class=\"xref py py-attr docutils literal notranslate\">primary_key</code></a></dt><dd><p>Jeśli ma wartość <code class=\"docutils literal notranslate\">True</code>, to pole jest kluczem głównym dla modelu.</p>\n<p>Jeśli nie podasz <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field.primary_key\" title=\"django.db.models.Field.primary_key\"><code class=\"xref py py-attr docutils literal notranslate\">primary_key=True</code></a> dla żadnego pola w swoim modelu, Django automatycznie doda <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.IntegerField\" title=\"django.db.models.IntegerField\"><code class=\"xref py py-class docutils literal notranslate\">IntegerField</code></a> do trzymania klucza głównego, więc nie musisz ustawiać <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field.primary_key\" title=\"django.db.models.Field.primary_key\"><code class=\"xref py py-attr docutils literal notranslate\">primary_key=True</code></a> na żadnym ze swoich pól, jeśli nie chcesz nadpisać domyślnego zachowania dla klucza głównego. Po więcej idź do artykułu <a class=\"reference internal\" href=\"#automatic-primary-key-fields\"><span class=\"std std-ref\">Automatyczne pola klucza głównego</span></a>.</p>\n<p>Pole klucza głównego jest tyko do odczytu. Jeśli zmienisz wartość klucza głównego istniejącego obiektu i zapiszesz go, powstanie nowy obiekt obok starego obiektu. Na przykład:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"k\">class</span> <span class=\"nc\">Fruit</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span> primary_key<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>fruit <span class=\"o\">=</span> Fruit<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Apple&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>fruit<span class=\"o\">.</span>name <span class=\"o\">=</span> <span class=\"s1\">&#39;Pear&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>fruit<span class=\"o\">.</span>save<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Fruit<span class=\"o\">.</span>objects<span class=\"o\">.</span>values_list<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> flat<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&#39;Apple&#39;, &#39;Pear&#39;]&gt;</span>\n</code></pre></div>\n</dd>\n<dt><a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field.unique\" title=\"django.db.models.Field.unique\"><code class=\"xref py py-attr docutils literal notranslate\">unique</code></a></dt><dd><p>Jeśli ma wartość <code class=\"docutils literal notranslate\">True</code>, to pole musi być unikalne wewnątrz tabeli.</p>\n</dd>\n</dl>\n<p>Powtarzamy, to są tylko krótkie opisy najbardziej powszechnych opcji pól. Pełne szczegóły można odnaleźć w <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#common-model-field-options\"><span class=\"std std-ref\">dokumentacji wspólnych opcji pól</span></a>.</p>\n</section>\n<section id=\"automatic-primary-key-fields\">\n<span id=\"id1\"></span><h3>Automatyczne pola klucza głównego<a class=\"heading-anchor\" href=\"#automatic-primary-key-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Domyślnie Django daje każdemu modelowi następujące pole:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"nb\">id</span> <span class=\"o\">=</span> models<span class=\"o\">.</span>AutoField<span class=\"p\">(</span>primary_key<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>To automatycznie zwiększany klucz główny.</p>\n<p>Jeśli chciałbyś określić własny klucz główny, po prostu dodaj <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field.primary_key\" title=\"django.db.models.Field.primary_key\"><code class=\"xref py py-attr docutils literal notranslate\">primary_key=True</code></a> w jednym ze swoich pól. Jeśli Django zobaczy, że określiłeś wprost <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field.primary_key\" title=\"django.db.models.Field.primary_key\"><code class=\"xref py py-attr docutils literal notranslate\">Field.primary_key</code></a>, nie doda automatycznej kolumny <code class=\"docutils literal notranslate\">id</code>.</p>\n<p>Każdy model wymaga, aby dokładnie jedno pole miało <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field.primary_key\" title=\"django.db.models.Field.primary_key\"><code class=\"xref py py-attr docutils literal notranslate\">primary_key=True</code></a> (albo określone wprost albo dodane automatycznie).</p>\n</section>\n<section id=\"verbose-field-names\">\n<span id=\"id2\"></span><h3>Rozwlekłe nazwy pól<a class=\"heading-anchor\" href=\"#verbose-field-names\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Każdy typ pola, za wyjątkiem <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a>, <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a> i <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\">OneToOneField</code></a>, przyjmuje opcjonalny pierwszy pozycyjny argument – rozwlekłą nazwę. Jeśli nie jest podana, Django automatycznie ją stworzy używając nazwy artybutu pola, konwertując znaki podkreślenia na spacje.</p>\n<p>W tym przykładzie rozwlekłą nazwą jest <code class=\"docutils literal notranslate\">&quot;person's first name&quot;</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>first_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span><span class=\"s2\">&quot;person&#39;s first name&quot;</span><span class=\"p\">,</span> max_length<span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>W tym przykładzie rozwlekłą nazwą jest <code class=\"docutils literal notranslate\">&quot;first name&quot;</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>first_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a>, <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a> i <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\">OneToOneField</code></a> wymagają, aby pierwszy argument był klasą modelu, więc używaj argumentu nazwanego <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field.verbose_name\" title=\"django.db.models.Field.verbose_name\"><code class=\"xref py py-attr docutils literal notranslate\">verbose_name</code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>poll <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>\n    Poll<span class=\"p\">,</span>\n    on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">,</span>\n    verbose_name<span class=\"o\">=</span><span class=\"s2\">&quot;the related poll&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\nsites <span class=\"o\">=</span> models<span class=\"o\">.</span>ManyToManyField<span class=\"p\">(</span>Site<span class=\"p\">,</span> verbose_name<span class=\"o\">=</span><span class=\"s2\">&quot;list of sites&quot;</span><span class=\"p\">)</span>\nplace <span class=\"o\">=</span> models<span class=\"o\">.</span>OneToOneField<span class=\"p\">(</span>\n    Place<span class=\"p\">,</span>\n    on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">,</span>\n    verbose_name<span class=\"o\">=</span><span class=\"s2\">&quot;related place&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>Konwencja zaleca nie kapitalizowanie pierwszej litery <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field.verbose_name\" title=\"django.db.models.Field.verbose_name\"><code class=\"xref py py-attr docutils literal notranslate\">verbose_name</code></a>. Django automatycznie uczyni pierwszą literę wielką, gdzie będzie tego potrzebował.</p>\n</section>\n<section id=\"relationships\">\n<h3>Relacje<a class=\"heading-anchor\" href=\"#relationships\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>W sposób oczywisty siła relacyjnych baz danych leży w tabelach będących ze sobą nawzajem w relacjach. Django daje sposoby na określenie trzech najbardziej powszechnych typów relacji w bazach danych: wiele-do-jednego, wiele-do-wielu i jeden-do-jednego.</p>\n<section id=\"many-to-one-relationships\">\n<h4>Many-to-one relationships<a class=\"heading-anchor\" href=\"#many-to-one-relationships\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Aby określić relację wiele-do-jednego, użyj <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">django.db.models.ForeignKey</code></a>. Możesz użyć go tak jak każdą inną klasę typu <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\">Field</code></a>: zawierając ją jaką atrybut klasowy swojego modelu.</p>\n<p><a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a> wymaga argumentu pozycyjnego: klasy, do której model jest w relacji.</p>\n<p>Na przykład jeśli model <code class=\"docutils literal notranslate\">Car</code> ma pole <code class=\"docutils literal notranslate\">Manufacturer</code> – to znaczy, że <code class=\"docutils literal notranslate\">Manufacturer</code> robi wiele samochodów, ale każde <code class=\"docutils literal notranslate\">Car</code> ma tylko jedno <code class=\"docutils literal notranslate\">Manufacturer</code> – użyj poniższych definicji:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"k\">class</span> <span class=\"nc\">Manufacturer</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"k\">pass</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">Car</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    manufacturer <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>Manufacturer<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n    <span class=\"c1\"># ...</span>\n</code></pre></div>\n<p>Możesz też tworzyć <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#recursive-relationships\"><span class=\"std std-ref\">relacje rekursywne</span></a> (obiekt z relacją wiele-do-jednego do samego siebie) i <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#lazy-relationships\"><span class=\"std std-ref\">relacje do modeli jeszcze niezdefiniowanych</span></a>; szczegóły w <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#ref-foreignkey\"><span class=\"std std-ref\">dokumentacji pól modelu</span></a>.</p>\n<p>Sugerowane, ale nie wymagane, jest aby nazwa pola <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a> (<code class=\"docutils literal notranslate\">manufacturer</code> w przykładzie powyżej) była nazwą modelu, małymi literami. Możesz oczywiście nazwać pole jak tylko chcesz. Na przykład:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">Car</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    company_that_makes_it <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>\n        Manufacturer<span class=\"p\">,</span>\n        on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"c1\"># ...</span>\n</code></pre></div>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">Zobacz także</p>\n<p>Pola <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a> przyjmują kilka dodatkowych argumentów, które są objaśnione w <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#foreign-key-arguments\"><span class=\"std std-ref\">dokumentacji pól modelu</span></a>. Te opcje pomagają określić jak relacja powinna działać; wszystkie są opcjonalne.</p>\n<p>Szczegóły na temat dostępu do obiektów w relacji zwrotnej są opisane w <a class=\"reference internal\" href=\"/pl/2.0/topics/db/queries/#backwards-related-objects\"><span class=\"std std-ref\">Przykład pójścia w relację zwrotną</span></a>.</p>\n<p>Przykładowy kod znajdziesz w <a class=\"reference internal\" href=\"/pl/2.0/topics/db/examples/many_to_one/\"><span class=\"doc\">Przykład modelu w relacji wiele-do-jednego</span></a>.</p>\n</aside>\n</section>\n<section id=\"many-to-many-relationships\">\n<h4>Many-to-many relationships<a class=\"heading-anchor\" href=\"#many-to-many-relationships\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Aby zdefiniować relację wiele-do-wielu, użyj <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a>. Używa się jej jak każdy typ klasy <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\">Field</code></a>: dodając jako atrybut klasowy twojego modelu.</p>\n<p><a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a> przyjmuje wymagany argument pozycyjny: klasę, z którą model jest związany.</p>\n<p>Na przykład, jeśli <code class=\"docutils literal notranslate\">Pizza</code> ma wiele obiektów <code class=\"docutils literal notranslate\">Topping</code> – to znaczy, że <code class=\"docutils literal notranslate\">Topping</code> może być na wielu pizzach i każda <code class=\"docutils literal notranslate\">Pizza</code> ma wiele składników – tak należy to zareprezentować:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"k\">class</span> <span class=\"nc\">Topping</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"k\">pass</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">Pizza</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    toppings <span class=\"o\">=</span> models<span class=\"o\">.</span>ManyToManyField<span class=\"p\">(</span>Topping<span class=\"p\">)</span>\n</code></pre></div>\n<p>Tak jak z <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a>, możesz też tworzyć <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#recursive-relationships\"><span class=\"std std-ref\">relacje rekursywne</span></a> (obiekt z relacją wiele-do-wielu do samego siebie) i <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#lazy-relationships\"><span class=\"std std-ref\">relacje do modeli jeszcze nie zdefiniowanych</span></a>.</p>\n<p>Sugerowane, ale nie wymagane jest, aby nazwa pola <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a> (<code class=\"docutils literal notranslate\">toppings</code> w przykładzie powyżej) była rzeczownikiem w liczbie mnogiej opisującym zbiór obiektów powiązanego modelu.</p>\n<p>Nie ma znaczenia, który model ma <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a>, ale powinieneś umieszczać je tylko w jednym z modeli – nie w obu.</p>\n<p>Zazwyczaj instancje <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a> powinny być w obiekcie, który będzie edytowany w formularzu. W powyższym przykładzie <code class=\"docutils literal notranslate\">toppings</code> są w <code class=\"docutils literal notranslate\">Pizza</code> (w odróżnieniu od <code class=\"docutils literal notranslate\">Topping</code> mającego <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a> <code class=\"docutils literal notranslate\">pizzas</code> ) ponieważ bardziej naturalnym jest myśleć o pizzach mających składniki niż o składnikach będących na wielu pizzach. W sposób, ja jest to przedstawione powyżej, formularz klasy <code class=\"docutils literal notranslate\">Pizza</code> pozwoliłby użytkownikom wybierać składniki.</p>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">Zobacz także</p>\n<p>Pełny przykład można znaleźć w artykule <a class=\"reference internal\" href=\"/pl/2.0/topics/db/examples/many_to_many/\"><span class=\"doc\">Przykład modelu w relacji wiele-do-wielu</span></a>.</p>\n</aside>\n<p>Pola <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a> też przyjmują kilka dodatkowych argumentów, które są objaśnione w <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#manytomany-arguments\"><span class=\"std std-ref\">dokumentacji pól modelu</span></a>. Te opcje pomagają określić jak relacja powinna działać; wszystkie są opcjonalne.</p>\n</section>\n<section id=\"extra-fields-on-many-to-many-relationships\">\n<span id=\"intermediary-manytomany\"></span><h4>Dodatkowe pola w relacjach wiele-do-wielu<a class=\"heading-anchor\" href=\"#extra-fields-on-many-to-many-relationships\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Kiedy masz do czynienia tylko z prostymi relacjami wiele-do-wielu takimi jak mieszanie i łączenie pizz i ich składników, standardowe <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a> jest wszystkim, czego ci potrzeba. Jednak czasem możesz potrzebować powiązać dane z relacją pomiędzy dwoma modelami.</p>\n<p>Na przykład rozważ przypadek aplikacji śledzącej grupy muzyczne, do których należą muzycy. Pomiędzy osobą a grupami, których jest członkiem, mamy relację wiele-do-wielu, więc mógłbyś użyć <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a> jako reprezentacji tej relacji. Jednakże jest wiele detali związanych z członkostwem, które mógłbyś chcieć zbierać, takich jak data, w której osoba dołączyła do grupy.</p>\n<p>Dla takich sytuacji Django pozwala określić model, który będzie użyty do zarządzania relacją wiele-do-wielu. Możesz wtedy umieścić dodatkowe pola w tym pośrednim modelu. Model pośredni jest związany z <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a> przez użycie argumentu <code class=\"xref py py-attr docutils literal notranslate\">through</code> do wskazania na model, który będzie się zachowywał jako pośredni. Dla naszego muzycznego przykładu kod wyglądałby jakoś tak:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"k\">class</span> <span class=\"nc\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">128</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>name\n\n<span class=\"k\">class</span> <span class=\"nc\">Group</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">128</span><span class=\"p\">)</span>\n    members <span class=\"o\">=</span> models<span class=\"o\">.</span>ManyToManyField<span class=\"p\">(</span>Person<span class=\"p\">,</span> through<span class=\"o\">=</span><span class=\"s1\">&#39;Membership&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>name\n\n<span class=\"k\">class</span> <span class=\"nc\">Membership</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    person <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>Person<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n    group <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>Group<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n    date_joined <span class=\"o\">=</span> models<span class=\"o\">.</span>DateField<span class=\"p\">()</span>\n    invite_reason <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">64</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Kiedy ustawiasz model pośredni, wprost określasz klucze obce do modeli, które wchodzą w skład relacji wiele-do-wielu. Ta deklaracja wprost określa jak są związane te dwa modele.</p>\n<p>Model pośredni ma kilka ograniczeń:</p>\n<ul class=\"simple\">\n<li><p>Twój model pośredni musi zawierać jeden i <em>tylko</em> jeden klucz obcy do źródłowego modelu (w naszym przykładzie byłoby to <code class=\"docutils literal notranslate\">Group</code>), lub musisz podać wprost klucze obce, które Django powinno użyć w relacji używając <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ManyToManyField.through_fields\" title=\"django.db.models.ManyToManyField.through_fields\"><code class=\"xref py py-attr docutils literal notranslate\">ManyToManyField.through_fields</code></a>. Jeśli masz więcej niż jeden klucz obcy i <code class=\"docutils literal notranslate\">through_fields</code> nie jest podane, zostanie zgłoszony błąd walidacji. Podobne ograniczenie tyczy się klucza obcego na modelu celu relacji (w naszym przykładzie byłoby to <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Person).</p></li>\n<li><p>Dla modelu, który ma relację wiele-do-wielu do samego siebie przez model pośredni, dwa klucze obce do tego samego modelu są dozwolone, ale będą traktowane jako dwie (różne) strony relacji wiele-do-wielu. Tym niemniej jeśli są <em>więcej</em> niż dwa klucze obce, również musisz określić <code class=\"docutils literal notranslate\">through_fields</code> jak powyżej. W przeciwnym wypadku zostanie zgłoszony błąd walidacji.</p></li>\n<li><p>Określając relację wiele-do-wielu z modelu do niego samego przy pomocy modelu pośredniego, <em>musisz</em> użyć <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ManyToManyField.symmetrical\" title=\"django.db.models.ManyToManyField.symmetrical\"><code class=\"xref py py-attr docutils literal notranslate\">symmetrical=False</code></a> (patrz <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#manytomany-arguments\"><span class=\"std std-ref\">dokumentacja pól modelu</span></a>).</p></li>\n</ul>\n<p>Kiedy już skonfigurowałeś swoje <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a> tak, aby używało twojego modelu pośredniego (w tym przypadku <code class=\"docutils literal notranslate\">Membership</code>), możesz zacząć dodawać jakieś relacje wiele-do-wielu. Robi się to tworząc instancje modelu pośredniego:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>ringo <span class=\"o\">=</span> Person<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Ringo Starr&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>paul <span class=\"o\">=</span> Person<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Paul McCartney&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>beatles <span class=\"o\">=</span> Group<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;The Beatles&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>m1 <span class=\"o\">=</span> Membership<span class=\"p\">(</span>person<span class=\"o\">=</span>ringo<span class=\"p\">,</span> group<span class=\"o\">=</span>beatles<span class=\"p\">,</span>\n<span class=\"gp\">... </span>    date_joined<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">1962</span><span class=\"p\">,</span> <span class=\"mi\">8</span><span class=\"p\">,</span> <span class=\"mi\">16</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    invite_reason<span class=\"o\">=</span><span class=\"s2\">&quot;Needed a new drummer.&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>m1<span class=\"o\">.</span>save<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>beatles<span class=\"o\">.</span>members<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Person: Ringo Starr&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>ringo<span class=\"o\">.</span>group_set<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Group: The Beatles&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>m2 <span class=\"o\">=</span> Membership<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>person<span class=\"o\">=</span>paul<span class=\"p\">,</span> group<span class=\"o\">=</span>beatles<span class=\"p\">,</span>\n<span class=\"gp\">... </span>    date_joined<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">1960</span><span class=\"p\">,</span> <span class=\"mi\">8</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    invite_reason<span class=\"o\">=</span><span class=\"s2\">&quot;Wanted to form a band.&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>beatles<span class=\"o\">.</span>members<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Person: Ringo Starr&gt;, &lt;Person: Paul McCartney&gt;]&gt;</span>\n</code></pre></div>\n<p>W przeciwieństwie do pól wiele-do-wielu, <em>nie możesz</em> używać <code class=\"docutils literal notranslate\">add()</code>, <code class=\"docutils literal notranslate\">create()</code> ani <code class=\"docutils literal notranslate\">set()</code> do tworzenia relacji:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># The following statements will not work</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>beatles<span class=\"o\">.</span>members<span class=\"o\">.</span>add<span class=\"p\">(</span>john<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>beatles<span class=\"o\">.</span>members<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;George Harrison&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>beatles<span class=\"o\">.</span>members<span class=\"o\">.</span>set<span class=\"p\">([</span>john<span class=\"p\">,</span> paul<span class=\"p\">,</span> ringo<span class=\"p\">,</span> george<span class=\"p\">])</span>\n</code></pre></div>\n<p>Dlaczego? Nie możesz po prostu stworzyć relacji pomiędzy <code class=\"docutils literal notranslate\">Person</code> i <code class=\"docutils literal notranslate\">Group</code> – musisz podać wszystkie szczegóły relacji wymagane przez model <code class=\"docutils literal notranslate\">Membership</code>. Proste wywołania <code class=\"docutils literal notranslate\">add</code>, <code class=\"docutils literal notranslate\">create</code> i przypisania nie dają możliwości określenia tych dodatkowych danych. W efekcie są wyłączone dla relacji wiele-do-wielu, które używają modelu pośredniego. Jedynym sposobem na stworzenie tego typu relacji jest stworzenie instancji modelu pośredniego.</p>\n<p>Metoda <a class=\"reference internal\" href=\"/pl/2.0/ref/models/relations/#django.db.models.fields.related.RelatedManager.remove\" title=\"django.db.models.fields.related.RelatedManager.remove\"><code class=\"xref py py-meth docutils literal notranslate\">remove()</code></a> jest wyłączona z podobnych powodów. Na przykład jeśli własna tabela „through” określona przez model pośredni nie wymusza unikalności na parze <code class=\"docutils literal notranslate\">(model1, model2)</code>, wywołanie <code class=\"docutils literal notranslate\">remove()</code> nie dostarczałoby wystarczająco informacji, by określić, która instancja modelu pośredniego powinna być usunięta:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>Membership<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>person<span class=\"o\">=</span>ringo<span class=\"p\">,</span> group<span class=\"o\">=</span>beatles<span class=\"p\">,</span>\n<span class=\"gp\">... </span>    date_joined<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">1968</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    invite_reason<span class=\"o\">=</span><span class=\"s2\">&quot;You&#39;ve been gone for a month and we miss you.&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>beatles<span class=\"o\">.</span>members<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet [&lt;Person: Ringo Starr&gt;, &lt;Person: Paul McCartney&gt;, &lt;Person: Ringo Starr&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># This will not work because it cannot tell which membership to remove</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>beatles<span class=\"o\">.</span>members<span class=\"o\">.</span>remove<span class=\"p\">(</span>ringo<span class=\"p\">)</span>\n</code></pre></div>\n<p>Natomiast metoda <a class=\"reference internal\" href=\"/pl/2.0/ref/models/relations/#django.db.models.fields.related.RelatedManager.clear\" title=\"django.db.models.fields.related.RelatedManager.clear\"><code class=\"xref py py-meth docutils literal notranslate\">clear()</code></a> może być używana do usunięcia wszystkich relacji wiele-do-wielu dla instancji:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Beatles have broken up</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>beatles<span class=\"o\">.</span>members<span class=\"o\">.</span>clear<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Note that this deletes the intermediate model instances</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Membership<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"go\">&lt;QuerySet []&gt;</span>\n</code></pre></div>\n<p>Kiedy już ustanowisz relacje wiele-do-wielu tworząc instancje swojego modelu pośredniego, możesz tworzyć kwerendy. Tak jak z normalnymi relacjami wiele-do-wielu możesz odpytywać używając atrybutów modelu związanego przez relację wiele-do-wielu:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Find all the groups with a member whose name starts with &#39;Paul&#39;</span>\n<span class=\"o\">&gt;&gt;&gt;</span> Group<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>members__name__startswith<span class=\"o\">=</span><span class=\"s1\">&#39;Paul&#39;</span><span class=\"p\">)</span>\n<span class=\"o\">&lt;</span>QuerySet <span class=\"p\">[</span><span class=\"o\">&lt;</span>Group<span class=\"p\">:</span> The Beatles<span class=\"o\">&gt;</span><span class=\"p\">]</span><span class=\"o\">&gt;</span>\n</code></pre></div>\n<p>Jako że używasz modelu pośredniego, możesz też tworzyć kwerendy z użyciem jego atrybutów:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Find all the members of the Beatles that joined after 1 Jan 1961</span>\n<span class=\"o\">&gt;&gt;&gt;</span> Person<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>\n<span class=\"o\">...</span>     group__name<span class=\"o\">=</span><span class=\"s1\">&#39;The Beatles&#39;</span><span class=\"p\">,</span>\n<span class=\"o\">...</span>     membership__date_joined__gt<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">1961</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">))</span>\n<span class=\"o\">&lt;</span>QuerySet <span class=\"p\">[</span><span class=\"o\">&lt;</span>Person<span class=\"p\">:</span> Ringo Starr<span class=\"p\">]</span><span class=\"o\">&gt;</span>\n</code></pre></div>\n<p>Jeśli potrzebujesz uzyskać informacje o „członkostwie”, możesz zrobić to bezpośrednio odpytując model <code class=\"docutils literal notranslate\">Membership</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>ringos_membership <span class=\"o\">=</span> Membership<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>group<span class=\"o\">=</span>beatles<span class=\"p\">,</span> person<span class=\"o\">=</span>ringo<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>ringos_membership<span class=\"o\">.</span>date_joined\n<span class=\"go\">datetime.date(1962, 8, 16)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>ringos_membership<span class=\"o\">.</span>invite_reason\n<span class=\"go\">&#39;Needed a new drummer.&#39;</span>\n</code></pre></div>\n<p>Innym sposobem na uzyskanie tej samej informacji jest odpytanie <a class=\"reference internal\" href=\"/pl/2.0/topics/db/queries/#m2m-reverse-relationships\"><span class=\"std std-ref\">zwrotnej relacji wiele-do-wielu</span></a> z obiektu <code class=\"docutils literal notranslate\">Person</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>ringos_membership <span class=\"o\">=</span> ringo<span class=\"o\">.</span>membership_set<span class=\"o\">.</span>get<span class=\"p\">(</span>group<span class=\"o\">=</span>beatles<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>ringos_membership<span class=\"o\">.</span>date_joined\n<span class=\"go\">datetime.date(1962, 8, 16)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>ringos_membership<span class=\"o\">.</span>invite_reason\n<span class=\"go\">&#39;Needed a new drummer.&#39;</span>\n</code></pre></div>\n</section>\n<section id=\"one-to-one-relationships\">\n<h4>One-to-one relationships<a class=\"heading-anchor\" href=\"#one-to-one-relationships\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Aby określić relację jeden-do-jednego, użyj <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\">OneToOneField</code></a>. Używa się je jak każdy inny typ <code class=\"docutils literal notranslate\">Field</code>: dodając je jako atrybut klasowy do swojego modelu.</p>\n<p>Najbardziej jest to przydatne na kluczu głównym obiektu, kiedy ten obiekt „rozszerza” inny obiekt w jakiś sposób.</p>\n<p><a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\">OneToOneField</code></a> wymaga argumentu pozycyjnego: klasy, z którą model jest związany.</p>\n<p>Na przykład gdybyś budował bazę danych „miejsc”, zbudowałbyś w bazie danych całkiem standardowe rzeczy jak adres, numer telefonu itp. Następnie, jeśli chciałbyś nadbudować bazę miejsc bazą restauracji, zamiast powtarzać się i powielać te pola w modelu <code class=\"docutils literal notranslate\">Restaurant</code>, mógłbyś modelowi <code class=\"docutils literal notranslate\">Restaurant</code> nadać <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\">OneToOneField</code></a> do <code class=\"docutils literal notranslate\">Place</code> (ponieważ restauracja „jest” miejscem; tak naprawdę, aby to obsłużyć, typowo użyłbyś <a class=\"reference internal\" href=\"#model-inheritance\"><span class=\"std std-ref\">dziedziczenia</span></a>, które tworzy wewnętrzną relację wiele-do-wielu).</p>\n<p>Tak jak z <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a>, można tworzyć <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#recursive-relationships\"><span class=\"std std-ref\">relacje rekursywne</span></a> i <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#lazy-relationships\"><span class=\"std std-ref\">relacje do modeli jeszcze nie zdefiniowanych</span></a>.</p>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">Zobacz także</p>\n<p>Obejrzyj pełen przykład w <a class=\"reference internal\" href=\"/pl/2.0/topics/db/examples/one_to_one/\"><span class=\"doc\">Przykładzie modelu z relacją jeden-do-jednego</span></a>.</p>\n</aside>\n<p>Pola <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\">OneToOneField</code></a> przyjmują też opcjonalny argument <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.OneToOneField.parent_link\" title=\"django.db.models.OneToOneField.parent_link\"><code class=\"xref py py-attr docutils literal notranslate\">parent_link</code></a>.</p>\n<p>Klasy <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\">OneToOneField</code></a> zwykły automatycznie stawać się kluczami głównymi modelu. Tak już się nie dzieje (chociaż możesz ręcznie przekazać argument <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field.primary_key\" title=\"django.db.models.Field.primary_key\"><code class=\"xref py py-attr docutils literal notranslate\">primary_key</code></a>, jeśli chcesz). A zatem jest teraz możliwe, aby mieć wiele pól typu <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\">OneToOneField</code></a> w jednym modelu.</p>\n</section>\n</section>\n<section id=\"models-across-files\">\n<h3>Modele w wielu plikach<a class=\"heading-anchor\" href=\"#models-across-files\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Mieć relację do pola z innej aplikacji jest całkowicie OK. Aby to zrobić zaimportuj powiązany model na początku pliku, w którym są definicje twoich modeli. Następnie po prostu odwołaj się do klasy innego modelu, gdziekolwiek potrzebujesz. Na przykład:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n<span class=\"kn\">from</span> <span class=\"nn\">geography.models</span> <span class=\"kn\">import</span> ZipCode\n\n<span class=\"k\">class</span> <span class=\"nc\">Restaurant</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    zip_code <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>\n        ZipCode<span class=\"p\">,</span>\n        on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>SET_NULL<span class=\"p\">,</span>\n        blank<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        null<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"field-name-restrictions\">\n<h3>Ograniczenia nazw pól<a class=\"heading-anchor\" href=\"#field-name-restrictions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django daje tylko dwa ograniczenia na nazwy pól modelu:</p>\n<ol class=\"arabic\">\n<li><p>Pole nie może być zarezerwowanym słowem Pythona, ponieważ to mogłoby się skończyć błędem składni Pythona. Na przykład:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">Example</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"k\">pass</span> <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">()</span> <span class=\"c1\"># &#39;pass&#39; is a reserved word!</span>\n</code></pre></div>\n</li>\n<li><p>Pole nie może zawierać więcej niż jednego znaku podkreślenia z rzędu z powodu sposobu, w jaki działa składnia lookupu w kwerendach. Na przykład:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">Example</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    foo__bar <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">()</span> <span class=\"c1\"># &#39;foo__bar&#39; has two underscores!</span>\n</code></pre></div>\n</li>\n</ol>\n<p>Bądź co bądź te ograniczenia można obejść, ponieważ nazwa pola nie musi koniecznie zgadzać się z nazwą kolumny w twojej bazie danych. Sprawdź opcję <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field.db_column\" title=\"django.db.models.Field.db_column\"><code class=\"xref py py-attr docutils literal notranslate\">db_column</code></a>.</p>\n<p>Zarezerwowane słowa SQL takie jak <code class=\"docutils literal notranslate\">join</code>, <code class=\"docutils literal notranslate\">where</code> i <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>select` <em>są</em> dozwolone jako nazwy pola modelu, ponieważ Django escape’uje wszystkie nazwy tabel i kolumn w bazie danych w każdej podstawowej kwerendzie SQL. Używa składni cudzysłowów twojego konkretnego silnika bazy danych.</p>\n</section>\n<section id=\"custom-field-types\">\n<h3>Własne typy pól<a class=\"heading-anchor\" href=\"#custom-field-types\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Jeśli żadne z istniejących pól modelu nie może sprostać twoim oczekiwaniom lub jeśli chcesz skorzystać jakichś mniej powszechnych typach kolumn bazy danych, możesz stworzyć swoją własną klasę pola. W pełni opisane tworzenie własnych pól jest opisane w <a class=\"reference internal\" href=\"/pl/2.0/howto/custom-model-fields/\"><span class=\"doc\">Writing custom model fields</span></a>.</p>\n</section>\n</section>\n<section id=\"meta-options\">\n<span id=\"id3\"></span><h2>Opcje <code class=\"docutils literal notranslate\">Meta</code><a class=\"heading-anchor\" href=\"#meta-options\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Określ metadane swojego modelu używając wewnętrznego <code class=\"docutils literal notranslate\">class Meta</code>, w ten sposób:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"k\">class</span> <span class=\"nc\">Ox</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    horn_length <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        ordering <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;horn_length&quot;</span><span class=\"p\">]</span>\n        verbose_name_plural <span class=\"o\">=</span> <span class=\"s2\">&quot;oxen&quot;</span>\n</code></pre></div>\n<p>Metadanymi modelu jest „wszystko, co nie jest polem”, tak jak opcje porządku (<a class=\"reference internal\" href=\"/pl/2.0/ref/models/options/#django.db.models.Options.ordering\" title=\"django.db.models.Options.ordering\"><code class=\"xref py py-attr docutils literal notranslate\">ordering</code></a>), nazwa tabeli w bazie danych (<a class=\"reference internal\" href=\"/pl/2.0/ref/models/options/#django.db.models.Options.db_table\" title=\"django.db.models.Options.db_table\"><code class=\"xref py py-attr docutils literal notranslate\">db_table</code></a>) lub pojedyncze i mnogie nazwy do czytelne dla człowieka (<a class=\"reference internal\" href=\"/pl/2.0/ref/models/options/#django.db.models.Options.verbose_name\" title=\"django.db.models.Options.verbose_name\"><code class=\"xref py py-attr docutils literal notranslate\">verbose_name</code></a> i <a class=\"reference internal\" href=\"/pl/2.0/ref/models/options/#django.db.models.Options.verbose_name_plural\" title=\"django.db.models.Options.verbose_name_plural\"><code class=\"xref py py-attr docutils literal notranslate\">verbose_name_plural</code></a>). Żadne z nich nie jest wymagane a dodawanie <code class=\"docutils literal notranslate\">class Meta</code> do modelu jest całkowicie opcjonalne.</p>\n<p>Pełną listę wszystkich możliwych opcji <code class=\"docutils literal notranslate\">Meta</code> możesz znaleźć w <a class=\"reference internal\" href=\"/pl/2.0/ref/models/options/\"><span class=\"doc\">dokumentacji opcji modelu</span></a>.</p>\n</section>\n<section id=\"model-attributes\">\n<span id=\"id4\"></span><h2>Atrybuty modelu<a class=\"heading-anchor\" href=\"#model-attributes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\">objects</code></dt><dd><p>Najważniejszym atrybutem modelu jest <a class=\"reference internal\" href=\"/pl/2.0/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\">Manager</code></a>. To interfejs, przez który operacje kwerend bazy danych są przekazywane modelom Django i jest używany do <a class=\"reference internal\" href=\"/pl/2.0/topics/db/queries/#retrieving-objects\"><span class=\"std std-ref\">pobierania instancji</span></a> z bazy danych. Jeśli nie jest określony własny <code class=\"docutils literal notranslate\">Manager</code>, jego domyślną nazwą jest <a class=\"reference internal\" href=\"/pl/2.0/ref/models/class/#django.db.models.Model.objects\" title=\"django.db.models.Model.objects\"><code class=\"xref py py-attr docutils literal notranslate\">objects</code></a>. Do menadżerów dostęp można uzyskać tylko przez klasy modeli, nie przez instancje modeli.</p>\n</dd>\n</dl>\n</section>\n<section id=\"model-methods\">\n<span id=\"id5\"></span><h2>Metody modelu<a class=\"heading-anchor\" href=\"#model-methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Określaj własne metody w modelu, aby dodać własną funkcjonalność do swoich obiektów „na poziomie wiersza”. Podczas gdy metody klasy <a class=\"reference internal\" href=\"/pl/2.0/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\">Manager</code></a> są przeznaczone do robienia rzeczy „na całej tabeli”, metody modelu powinny działaś na poszczególnej instancji modelu.</p>\n<p>To cenna technika na trzymanie logiki biznesowej w jednym miejscu – model.</p>\n<p>Na przykład ten model ma kilka własnych metod:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"k\">class</span> <span class=\"nc\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    first_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    last_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    birth_date <span class=\"o\">=</span> models<span class=\"o\">.</span>DateField<span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">baby_boomer_status</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"s2\">&quot;Returns the person&#39;s baby-boomer status.&quot;</span>\n        <span class=\"kn\">import</span> <span class=\"nn\">datetime</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span>birth_date <span class=\"o\">&lt;</span> datetime<span class=\"o\">.</span>date<span class=\"p\">(</span><span class=\"mi\">1945</span><span class=\"p\">,</span> <span class=\"mi\">8</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"s2\">&quot;Pre-boomer&quot;</span>\n        <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span>birth_date <span class=\"o\">&lt;</span> datetime<span class=\"o\">.</span>date<span class=\"p\">(</span><span class=\"mi\">1965</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"s2\">&quot;Baby boomer&quot;</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s2\">&quot;Post-boomer&quot;</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">full_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"s2\">&quot;Returns the person&#39;s full name.&quot;</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>first_name<span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span>last_name<span class=\"p\">)</span>\n</code></pre></div>\n<p>Ostatnia metoda w tym przykładzie to <a class=\"reference internal\" href=\"/pl/2.0/glossary/#term-property\"><span class=\"xref std std-term\">property</span></a>.</p>\n<p><span class=\"xref std std-ref\">Dokumentacja instancji modelu</span> zawiera pełną listę <a class=\"reference internal\" href=\"/pl/2.0/ref/models/instances/#model-instance-methods\"><span class=\"std std-ref\">metod automatycznie dawanych każdemu modelowi</span></a>. Możesz nadpisać większość z nich – patrz <a class=\"reference internal\" href=\"#overriding-predefined-model-methods\">nadpisywanie predefiniowanych metod modelu</a> poniżej – ale jest kilka, które prawie zawsze będziesz chciał określić:</p>\n<dl>\n<dt><a class=\"reference internal\" href=\"/pl/2.0/ref/models/instances/#django.db.models.Model.__str__\" title=\"django.db.models.Model.__str__\"><code class=\"xref py py-meth docutils literal notranslate\">__str__()</code></a></dt><dd><p>„Magiczna metoda” Pythona, która zwraca reprezentację w ciągu znaków dowolnego obiektu. Tego używać będzie Python i Django, kiedykolwiek na instancji modelu wymusimy wyświetlenie jako prosty ciąg znaków. W szczególności dzieje się to, kiedy wyświetlamy obiekt w interaktywnej konsoli lub w panelu administracyjnym.</p>\n<p>Zawsze będziesz chciał określić tę metodę; domyślna jest zupełnie nie pomocna.</p>\n</dd>\n<dt><a class=\"reference internal\" href=\"/pl/2.0/ref/models/instances/#django.db.models.Model.get_absolute_url\" title=\"django.db.models.Model.get_absolute_url\"><code class=\"xref py py-meth docutils literal notranslate\">get_absolute_url()</code></a></dt><dd><p>Mówi Django jak wyliczać URL dla obiektu. Django używa go w swoim interfejsie admina i za każdym razem, gdy potrzebuje ustalić URL dla obiektu.</p>\n<p>Każdy obiekt, który ma URL, który określa go jednoznacznie, powinien mieć zdefiniowaną tę metodę.</p>\n</dd>\n</dl>\n<section id=\"overriding-predefined-model-methods\">\n<span id=\"overriding-model-methods\"></span><h3>Nadpisywanie predefiniowanych metod modelu<a class=\"heading-anchor\" href=\"#overriding-predefined-model-methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Jest jeszcze jeden zbiór <a class=\"reference internal\" href=\"/pl/2.0/ref/models/instances/#model-instance-methods\"><span class=\"std std-ref\">metod modelu</span></a>, który zawiera zestaw zachowań bazodanowych, które będziesz chciał zmieniać. W szczególności będziesz często chciał zmieniać sposób, w jaki działają <a class=\"reference internal\" href=\"/pl/2.0/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a> i <a class=\"reference internal\" href=\"/pl/2.0/ref/models/instances/#django.db.models.Model.delete\" title=\"django.db.models.Model.delete\"><code class=\"xref py py-meth docutils literal notranslate\">delete()</code></a>.</p>\n<p>Możesz nadpisać te metody (i każdą inną metodę modelu), aby zmienić ich zachowanie.</p>\n<p>Klasycznym przypadkiem użycia dla nadpisania wbudowanych metod jest jeśli chcesz, by coś się działo za każdym razem, gdy zapisujesz obiekt. Na przykład (patrz <a class=\"reference internal\" href=\"/pl/2.0/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a> po dokumentację parametrów, które akceptuje):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"k\">class</span> <span class=\"nc\">Blog</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    tagline <span class=\"o\">=</span> models<span class=\"o\">.</span>TextField<span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span>args<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        do_something<span class=\"p\">()</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>save<span class=\"p\">(</span><span class=\"o\">*</span>args<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">)</span>  <span class=\"c1\"># Call the &quot;real&quot; save() method.</span>\n        do_something_else<span class=\"p\">()</span>\n</code></pre></div>\n<p>Możesz też zapobiec zapisaniu:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"k\">class</span> <span class=\"nc\">Blog</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    tagline <span class=\"o\">=</span> models<span class=\"o\">.</span>TextField<span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span>args<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span>name <span class=\"o\">==</span> <span class=\"s2\">&quot;Yoko Ono&#39;s blog&quot;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"c1\"># Yoko shall never have her own blog!</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>save<span class=\"p\">(</span><span class=\"o\">*</span>args<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">)</span>  <span class=\"c1\"># Call the &quot;real&quot; save() method.</span>\n</code></pre></div>\n<p>Ważne jest, by pamiętać, aby wywoływać metody nadklasy – to ten fragment z <code class=\"docutils literal notranslate\">super().save(*args, **kwargs)</code> – aby na pewno zapisać obiekt do bazy danych. Jeśli zapomnisz wywołać metodę nadklasy, nie wykona się domyślne działanie i baza danych nie zostanie dotknięta.</p>\n<p>Ważne jest też, abyś przekazał argumenty, które mogą zostać przekazane do metody modelu – to robi kawałek <code class=\"docutils literal notranslate\">*args, **kwargs</code>. Django będzie od czasu do czasu rozszerzało możliwości wbudowanych metod modelu dodając nowe argumenty. Używając <code class=\"docutils literal notranslate\">*args, **kwargs</code> w definicjach swoich metod masz gwarancję, że twój kod będzie automatycznie wspierał te argumenty, gdy zostaną dodane.</p>\n<aside class=\"admonition-overridden-model-methods-are-not-called-on-bulk-operations admonition\" role=\"note\">\n<p class=\"admonition-title\">Nadpisane metody modelu nie są wołane przy operacjach zbiorczych</p>\n<p>Zwróć uwagę, że metoda <a class=\"reference internal\" href=\"/pl/2.0/ref/models/instances/#django.db.models.Model.delete\" title=\"django.db.models.Model.delete\"><code class=\"xref py py-meth docutils literal notranslate\">delete()</code></a> obiektu niekoniecznie jest wywoływana, gdy <a class=\"reference internal\" href=\"/pl/2.0/topics/db/queries/#topics-db-queries-delete\"><span class=\"std std-ref\">usuwa się obiekty zbiorczo przy użyciu QuerySetu</span></a> lub w rezultacie <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ForeignKey.on_delete\" title=\"django.db.models.ForeignKey.on_delete\"><code class=\"xref py py-attr docutils literal notranslate\">usuwania kaskadowego</code></a>. Aby mieć pewność, że twoja własna logika usuwania się wykona, możesz użyć sygnałów <a class=\"reference internal\" href=\"/pl/2.0/ref/signals/#django.db.models.signals.pre_delete\" title=\"django.db.models.signals.pre_delete\"><code class=\"xref py py-data docutils literal notranslate\">pre_delete</code></a> i/lub <a class=\"reference internal\" href=\"/pl/2.0/ref/signals/#django.db.models.signals.post_delete\" title=\"django.db.models.signals.post_delete\"><code class=\"xref py py-data docutils literal notranslate\">post_delete</code></a>.</p>\n<p>Niestety nie ma obejścia przy zbiorczym <a class=\"reference internal\" href=\"/pl/2.0/ref/models/querysets/#django.db.models.query.QuerySet.bulk_create\" title=\"django.db.models.query.QuerySet.bulk_create\"><code class=\"xref py py-meth docutils literal notranslate\">tworzeniu</code></a> i <a class=\"reference internal\" href=\"/pl/2.0/ref/models/querysets/#django.db.models.query.QuerySet.update\" title=\"django.db.models.query.QuerySet.update\"><code class=\"xref py py-meth docutils literal notranslate\">aktualizacji</code></a> obiektów, jako że żadna z metod <a class=\"reference internal\" href=\"/pl/2.0/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a>, <a class=\"reference internal\" href=\"/pl/2.0/ref/signals/#django.db.models.signals.pre_save\" title=\"django.db.models.signals.pre_save\"><code class=\"xref py py-data docutils literal notranslate\">pre_save</code></a>, and <a class=\"reference internal\" href=\"/pl/2.0/ref/signals/#django.db.models.signals.post_save\" title=\"django.db.models.signals.post_save\"><code class=\"xref py py-data docutils literal notranslate\">post_save</code></a> nie są wywoływane.</p>\n</aside>\n</section>\n<section id=\"executing-custom-sql\">\n<h3>Wykonywanie własnego SQL-a<a class=\"heading-anchor\" href=\"#executing-custom-sql\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Innym powszechnym wzorcem jest pisanie własnych zapytań SQL w metodach modeli i metodach modułowych. Więcej szczegółów na temat używania surowego SQL-a znajdziesz w dokumentacji na temat <a class=\"reference internal\" href=\"/pl/2.0/topics/db/sql/\"><span class=\"doc\">używania surowego SQL-a</span></a>.</p>\n</section>\n</section>\n<section id=\"model-inheritance\">\n<span id=\"id6\"></span><h2>Dziedziczenie modeli<a class=\"heading-anchor\" href=\"#model-inheritance\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Dziedziczenie modeli w Django działa prawie identycznie do sposobu, w jaki normalne dziedziczenie klas działa w Pythonie, ale podstawy z początku strony wciąż nas obowiązują. To znaczy, że klasa bazowa powinna dziedziczyć po <a class=\"reference internal\" href=\"/pl/2.0/ref/models/instances/#django.db.models.Model\" title=\"django.db.models.Model\"><code class=\"xref py py-class docutils literal notranslate\">django.db.models.Model</code></a>.</p>\n<p>Jedyna decyzja, którą musisz podjąć, to czy chcesz, aby modele-rodzice były modelami na swoich własnych prawach (ze swoimi własnymi tabelami w bazie danych), czy rodzice mają być tylko posiadaczami wspólnych informacji, które będą widoczne jedynie przez modele potomne.</p>\n<p>Są trzy style dziedziczenia, które są możliwe w Django.</p>\n<ol class=\"arabic simple\">\n<li><p>Często będziesz potrzebował klasy-rodzica tylko do trzymania informacji, których nie chcesz wpisywać dla każdego modelu potomnego. Ta klasa nie będzie nigdy używana osobno, więc <a class=\"reference internal\" href=\"#abstract-base-classes\"><span class=\"std std-ref\">Abstrakcyjne klasy bazowe</span></a> są tym, czego szukasz.</p></li>\n<li><p>Jeśli dziedziczysz po istniejącym modelu (być może czymś z całkowicie innej aplikacji) i chcesz, aby każdy model miał swoją własną tabelę w bazie danych, <a class=\"reference internal\" href=\"#multi-table-inheritance\"><span class=\"std std-ref\">Dziedziczenie wielotabelowe</span></a> jest właściwą drogą.</p></li>\n<li><p>Ostatecznie jeśli chcesz zmienić zachowanie modelu tylko na poziomie Pythona, bez zmiany pól modelu w żaden sposób, możesz użyć <a class=\"reference internal\" href=\"#proxy-models\"><span class=\"std std-ref\">Proxy models</span></a>.</p></li>\n</ol>\n<section id=\"abstract-base-classes\">\n<span id=\"id7\"></span><h3>Abstrakcyjne klasy bazowe<a class=\"heading-anchor\" href=\"#abstract-base-classes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Abstrakcyjne modele bazowe przydają się, gdy chcesz umieścić jakieś wspólne informacje w kilku innych modelach. Piszesz swoją klasę bazową i umieszczasz <code class=\"docutils literal notranslate\">abstract=True</code> w klasie <a class=\"reference internal\" href=\"#meta-options\"><span class=\"std std-ref\">Meta</span></a>. Ten model w konsekwencji nie będzie używany do stworzenia żadnej tabeli w bazie danych. Zamiast tego, gdy zostanie użyty jako klasa bazowa dla innych modeli, jego pola zostaną dodane do tabel klasy potomnej.</p>\n<p>Przykład:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"k\">class</span> <span class=\"nc\">CommonInfo</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    age <span class=\"o\">=</span> models<span class=\"o\">.</span>PositiveIntegerField<span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        abstract <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">Student</span><span class=\"p\">(</span>CommonInfo<span class=\"p\">):</span>\n    home_group <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Model <code class=\"docutils literal notranslate\">Student</code> będzie miał trzy pola: <code class=\"docutils literal notranslate\">name</code>, <code class=\"docutils literal notranslate\">age</code> i <code class=\"docutils literal notranslate\">home_group</code>. Model <code class=\"docutils literal notranslate\">CommonInfo</code> nie może być używany jako normalny model Django, jako że jest abstrakcyjną klasą bazową. Nie generuje tabeli w bazie danych ani nie ma menadżera i nie może być zinstancjonowany ani bezpośrednio zapisany.</p>\n<p>Pola odziedziczone z abstrakcyjnych klas bazowych mogą być nadpisane innym polem lub wartością, lub usunięte przy użyciu <code class=\"docutils literal notranslate\">None</code>.</p>\n<p>W wielu użyciach ten typ dziedziczenia modelu będzie dokładnie tym, czego chcesz. Dostarcza on sposobu na wydzielenie wspólnych informacji na poziomie Pythona, wciąż tworząc tylko jedną tabelę na model potomny na poziomie bazy danych.</p>\n<section id=\"meta-inheritance\">\n<h4>Dziedziczenie <code class=\"docutils literal notranslate\">Meta</code><a class=\"heading-anchor\" href=\"#meta-inheritance\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Gdy tworzona jest abstrakcyjna klasa bazowa, Django udostępnia każdą wewnętrzną klasę <a class=\"reference internal\" href=\"#meta-options\"><span class=\"std std-ref\">Meta</span></a>, którą zadeklarujesz w bazowej klasie, jako atrybut. Jeśli klasa potomna nie deklaruje swojej własnej klasy <a class=\"reference internal\" href=\"#meta-options\"><span class=\"std std-ref\">Meta</span></a>, odziedziczy :ref:Meta &lt;meta-options&gt;` rodzica. Jeśli potomek chce rozszerzyć klasę <a class=\"reference internal\" href=\"#meta-options\"><span class=\"std std-ref\">Meta</span></a> rodzica, może po nim dziedziczyć. Na przykład:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"k\">class</span> <span class=\"nc\">CommonInfo</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        abstract <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        ordering <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">]</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">Student</span><span class=\"p\">(</span>CommonInfo<span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">(</span>CommonInfo<span class=\"o\">.</span>Meta<span class=\"p\">):</span>\n        db_table <span class=\"o\">=</span> <span class=\"s1\">&#39;student_info&#39;</span>\n</code></pre></div>\n<p>Django dostosowuje jedną rzecz w klasie <a class=\"reference internal\" href=\"#meta-options\"><span class=\"std std-ref\">Meta</span></a> abstrakcyjnej klasy bazowej: przed zainstalowaniem atrybutu <a class=\"reference internal\" href=\"#meta-options\"><span class=\"std std-ref\">Meta</span></a> ustawia <code class=\"docutils literal notranslate\">abstract=False</code>. To powoduje, że dzieci abstrakcyjnych klas bazowych nie staną się automatycznie same klasami abstrakcyjnymi. Oczywiście możesz stworzyć abstrakcyjną klasę bazową, która dziedziczy z innej abstrakcyjnej klasy bazowej. Musisz tylko pamiętać, aby wprost ustawić <code class=\"docutils literal notranslate\">abstract=True</code> za każdym razem.</p>\n<p>Niektórych atrybutów nie ma sensu umieszczać w klasie <a class=\"reference internal\" href=\"#meta-options\"><span class=\"std std-ref\">Meta</span></a> abstrakcyjnej klasy bazowej. Na przykład umieszczenie <code class=\"docutils literal notranslate\">db_table</code> oznaczałoby, że wszystkie potomne klasy (te, które nie określą swojego własnego <a class=\"reference internal\" href=\"#meta-options\"><span class=\"std std-ref\">Meta</span></a>) używałyby tej samej tabeli bazodanowej, a jest prawie pewne, że tego nie chcesz.</p>\n</section>\n<section id=\"be-careful-with-related-name-and-related-query-name\">\n<span id=\"abstract-related-name\"></span><h4>Bądź ostrożny z <code class=\"docutils literal notranslate\">related_name</code> i <code class=\"docutils literal notranslate\">related_query_name</code><a class=\"heading-anchor\" href=\"#be-careful-with-related-name-and-related-query-name\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Jeśli używasz <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ForeignKey.related_name\" title=\"django.db.models.ForeignKey.related_name\"><code class=\"xref py py-attr docutils literal notranslate\">related_name</code></a> lub <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ForeignKey.related_query_name\" title=\"django.db.models.ForeignKey.related_query_name\"><code class=\"xref py py-attr docutils literal notranslate\">related_query_name</code></a> w polu <code class=\"docutils literal notranslate\">ForeignKey</code> lub <code class=\"docutils literal notranslate\">ManyToManyField</code>, zawsze musisz podać <em>unikalną</em> nazwę zwrotną i nazwę zapytania dla pola. Normalnie mogłoby to spowodować problem w abstrakcyjnych klasach bazowych, jako że pola takiej klasy są zawarte w każdej z klas potomnych, z dokładnie takimi samymi wartościami atrybutów (wliczając <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ForeignKey.related_name\" title=\"django.db.models.ForeignKey.related_name\"><code class=\"xref py py-attr docutils literal notranslate\">related_name</code></a> i <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ForeignKey.related_query_name\" title=\"django.db.models.ForeignKey.related_query_name\"><code class=\"xref py py-attr docutils literal notranslate\">related_query_name</code></a>) dla każdej.</p>\n<p>Aby obejść ten problem, gdy używasz <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ForeignKey.related_name\" title=\"django.db.models.ForeignKey.related_name\"><code class=\"xref py py-attr docutils literal notranslate\">related_name</code></a> lub <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ForeignKey.related_query_name\" title=\"django.db.models.ForeignKey.related_query_name\"><code class=\"xref py py-attr docutils literal notranslate\">related_query_name</code></a> w abstrakcyjnej klasie bazowej (tylko), częścią ich wartości powinno być``»%(app_label)s»`` i <code class=\"docutils literal notranslate\">'%(class)s'</code>.</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">'%(class)s'</code> jest zamieniane na nazwę klasy potomnej, w której użyte jest to pole, pisaną małymi literami.</p></li>\n<li><p><code class=\"docutils literal notranslate\">'%(app_label)s'</code> jest zamieniane na nazwę aplikacji, w której zawiera się klasa potomna, pisaną małymi literami. Nazwa każdej zainstalowanej aplikacji musi być unikalna a nazwy klas modeli w każdej aplikacji również muszą być unikalne, stąd otrzymana w wyniku nazwa będzie zawsze unikalna.</p></li>\n</ul>\n<p>Na przykład dla aplikacji <code class=\"docutils literal notranslate\">common/models.py</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"k\">class</span> <span class=\"nc\">Base</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    m2m <span class=\"o\">=</span> models<span class=\"o\">.</span>ManyToManyField<span class=\"p\">(</span>\n        OtherModel<span class=\"p\">,</span>\n        related_name<span class=\"o\">=</span><span class=\"s2\">&quot;</span><span class=\"si\">%(app_label)s</span><span class=\"s2\">_</span><span class=\"si\">%(class)s</span><span class=\"s2\">_related&quot;</span><span class=\"p\">,</span>\n        related_query_name<span class=\"o\">=</span><span class=\"s2\">&quot;</span><span class=\"si\">%(app_label)s</span><span class=\"s2\">_</span><span class=\"si\">%(class)s</span><span class=\"s2\">s&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        abstract <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">ChildA</span><span class=\"p\">(</span>Base<span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">ChildB</span><span class=\"p\">(</span>Base<span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n</code></pre></div>\n<p>W połączeniu z inną aplikacją <code class=\"docutils literal notranslate\">rare/models.py</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">common.models</span> <span class=\"kn\">import</span> Base\n\n<span class=\"k\">class</span> <span class=\"nc\">ChildB</span><span class=\"p\">(</span>Base<span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n</code></pre></div>\n<p>Nazwą zwrotną pola <code class=\"docutils literal notranslate\">common.ChildA.m2m</code> będzie <code class=\"docutils literal notranslate\">common_childa_related</code> a nazwą zwrotną zapytania będzie <code class=\"docutils literal notranslate\">common_childas</code>. Nazwą zwrotną pola <code class=\"docutils literal notranslate\">common.ChildB.m2m</code> będzie <code class=\"docutils literal notranslate\">common_childb_related</code> a nazwą zwrotną zapytania będzie <code class=\"docutils literal notranslate\">common_childbs</code>. Wreszcie nazwą zwrotną pola <code class=\"docutils literal notranslate\">rare.ChildB.m2m</code> będzie <code class=\"docutils literal notranslate\">rare_childb_related</code> a nazwą zwrotną zapytania będzie <code class=\"docutils literal notranslate\">rare_childbs</code>. Od ciebie zależy jak użyjesz fragementów <code class=\"docutils literal notranslate\">'%(class)s'</code> i <code class=\"docutils literal notranslate\">'%(app_label)s'</code> do stworzenia swojej nazwy zwrotnej pola lub nazwy zwrotnej zapytania, ale jeśli zapomnisz ich użyć, Django zgłosi błąd, gdy wywołasz sprawdzanie systemu (lub uruchomisz <a class=\"reference internal\" href=\"/pl/2.0/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">migrate</code></a>).</p>\n<p>Jeśli nie podasz wartości atrybutu <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ForeignKey.related_name\" title=\"django.db.models.ForeignKey.related_name\"><code class=\"xref py py-attr docutils literal notranslate\">related_name</code></a> dla pola w abstrakcyjnej klasie bazowej, domyślną nazwą zwrotną będzie nazwa klasy potomnej, po której nastąpi <code class=\"docutils literal notranslate\">'_set'</code>, tak jak normalnie by to było, gdybyś zadeklarował pole bezpośrednio w klasie potomnej. Na przykład w powyższym kodzie, jeśli atrybut <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ForeignKey.related_name\" title=\"django.db.models.ForeignKey.related_name\"><code class=\"xref py py-attr docutils literal notranslate\">related_name</code></a> zostałby ominięty, nazwą zwrotną dla pola <code class=\"docutils literal notranslate\">m2m</code> byłoby <code class=\"docutils literal notranslate\">childa_set</code> w przypadku <code class=\"docutils literal notranslate\">ChildA</code> oraz <code class=\"docutils literal notranslate\">childb_set</code> dla pola <code class=\"docutils literal notranslate\">ChildB</code>.</p>\n</section>\n</section>\n<section id=\"multi-table-inheritance\">\n<span id=\"id8\"></span><h3>Dziedziczenie wielotabelowe<a class=\"heading-anchor\" href=\"#multi-table-inheritance\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Drugim typem dziedziczenia modeli wspieranym przez Django jest kiedy każdy model w hierarchii jest sam z siebie modelem. Każdy model ma swoją własną tabelę w bazie danych i można na nim wykonywać zapytania i tworzyć go osobno. Relacja dziedziczenia wprowadza powiązania pomiędzy modelem potomnym i każdym z jego rodziców (przez automatycznie tworzone <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\">OneToOneField</code></a>). Na przykład:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"k\">class</span> <span class=\"nc\">Place</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    address <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">80</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">Restaurant</span><span class=\"p\">(</span>Place<span class=\"p\">):</span>\n    serves_hot_dogs <span class=\"o\">=</span> models<span class=\"o\">.</span>BooleanField<span class=\"p\">(</span>default<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    serves_pizza <span class=\"o\">=</span> models<span class=\"o\">.</span>BooleanField<span class=\"p\">(</span>default<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Wszystkie pola modelu <code class=\"docutils literal notranslate\">Place</code> będą też dostępne w <code class=\"docutils literal notranslate\">Restaurant</code>, chociaż dane będą przechowywane w innej tabeli bazy danych. Więc obie rzeczy są możliwe:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>Place<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Bob&#39;s Cafe&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Restaurant<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Bob&#39;s Cafe&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Jeśli masz <code class=\"docutils literal notranslate\">Place</code>, które jest też <code class=\"docutils literal notranslate\">Restaurant</code>, możesz przejść z obiektu <code class=\"docutils literal notranslate\">Place</code> do obiektu <code class=\"docutils literal notranslate\">Restaurant</code> używając nazwy modelu małymi literami:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>p <span class=\"o\">=</span> Place<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">12</span><span class=\"p\">)</span>\n<span class=\"go\"># If p is a Restaurant object, this will give the child class:</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p<span class=\"o\">.</span>restaurant\n<span class=\"go\">&lt;Restaurant: ...&gt;</span>\n</code></pre></div>\n<p>Gdyby <code class=\"docutils literal notranslate\">p</code> w powyższym przykładzie <em>nie</em> było <code class=\"docutils literal notranslate\">Restaurant</code> (zostało stworzone bezpośrednio jako obiekt <code class=\"docutils literal notranslate\">Place</code> lub było rodzicem jakiejś innej klasy), odwołanie się do <code class=\"docutils literal notranslate\">p.restaurant</code> zgłosiłoby wyjątek <code class=\"docutils literal notranslate\">Restaurant.DoesNotExist</code>.</p>\n<p>Automatycznie stworzone <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\">OneToOneField</code></a> w <code class=\"docutils literal notranslate\">Restaurant</code>, które łączy nas z <code class=\"docutils literal notranslate\">Place</code> wygląda tak:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>place_ptr <span class=\"o\">=</span> models<span class=\"o\">.</span>OneToOneField<span class=\"p\">(</span>\n    Place<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">,</span>\n    parent_link<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>Możesz nadpisać to pole deklarując własne <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\">OneToOneField</code></a> z <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.OneToOneField.parent_link\" title=\"django.db.models.OneToOneField.parent_link\"><code class=\"xref py py-attr docutils literal notranslate\">parent_link=True</code></a> w <code class=\"docutils literal notranslate\">Restaurant</code>.</p>\n<section id=\"meta-and-multi-table-inheritance\">\n<span id=\"id9\"></span><h4><code class=\"docutils literal notranslate\">Meta</code> i dziedziczenie wielotabelowe<a class=\"heading-anchor\" href=\"#meta-and-multi-table-inheritance\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>W sytuacji dziedziczenia wielotabelowego, nie ma sensu, aby klasa potomna dziedziczyła z klasy <a class=\"reference internal\" href=\"#meta-options\"><span class=\"std std-ref\">Meta</span></a> swojego rodzica. Wszystkie opcje <a class=\"reference internal\" href=\"#meta-options\"><span class=\"std std-ref\">Meta</span></a> są już zaaplikowane do klasy rodzica i ponowne ich aplikowanie prowadziłoby normalnie do sprzecznego zachowania (w przeciwieństwie do przypadku abstrakcyjnej klasy bazowej, gdzie klasa bazowa nie istnieje na swoich własnych prawach).</p>\n<p>Więc model potomny nie ma dostępu dla klasy <a class=\"reference internal\" href=\"#meta-options\"><span class=\"std std-ref\">Meta</span></a> rodzica. Jednakże jest kilka ograniczonych przypadków, gdzie dziecko dziedziczy zachowanie z rodzica: jeśli dziecko nie podaje atrybutu <a class=\"reference internal\" href=\"/pl/2.0/ref/models/options/#django.db.models.Options.ordering\" title=\"django.db.models.Options.ordering\"><code class=\"xref py py-attr docutils literal notranslate\">ordering</code></a> lub <a class=\"reference internal\" href=\"/pl/2.0/ref/models/options/#django.db.models.Options.get_latest_by\" title=\"django.db.models.Options.get_latest_by\"><code class=\"xref py py-attr docutils literal notranslate\">get_latest_by</code></a>, odziedziczy je po rodzicu.</p>\n<p>Jeśli rodzic ma określony porządek i nie chcesz, aby dziecko miało jakikolwiek naturalny porządek, możesz wyraźnie go wyłączyć:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">ChildModel</span><span class=\"p\">(</span>ParentModel<span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Remove parent&#39;s ordering effect</span>\n        ordering <span class=\"o\">=</span> <span class=\"p\">[]</span>\n</code></pre></div>\n</section>\n<section id=\"inheritance-and-reverse-relations\">\n<h4>Dziedziczenie i relacje zwrotne<a class=\"heading-anchor\" href=\"#inheritance-and-reverse-relations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Ponieważ dziedziczenie wielotabelowe używa domyślnego <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\">OneToOneField</code></a> by połączyć dziecko z rodzicem, możliwe jest przejście z rodzica „w dół” do dziecka, jak w powyższym przykładzie. To pole używa nazwy, która jest domyślną wartością <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ForeignKey.related_name\" title=\"django.db.models.ForeignKey.related_name\"><code class=\"xref py py-attr docutils literal notranslate\">related_name</code></a> dla relacji <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a> i <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a>. Jeśli umieszczasz te typy relacji w podklasie modelu rodzica, <strong>musisz</strong> podać wartość atrybutu <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ForeignKey.related_name\" title=\"django.db.models.ForeignKey.related_name\"><code class=\"xref py py-attr docutils literal notranslate\">related_name</code></a> w każdym takim polu. Jeśli zapomnisz, Django zgłosi błąd walidacji.</p>\n<p>Na przykład używając znów powyższej klasy <code class=\"docutils literal notranslate\">Place</code>, stwórzmy inną podklasę z <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">Supplier</span><span class=\"p\">(</span>Place<span class=\"p\">):</span>\n    customers <span class=\"o\">=</span> models<span class=\"o\">.</span>ManyToManyField<span class=\"p\">(</span>Place<span class=\"p\">)</span>\n</code></pre></div>\n<p>Wynikiem jest błąd:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>Reverse query name <span class=\"k\">for</span> <span class=\"s1\">&#39;Supplier.customers&#39;</span> clashes <span class=\"k\">with</span> reverse query\nname <span class=\"k\">for</span> <span class=\"s1\">&#39;Supplier.place_ptr&#39;</span><span class=\"o\">.</span>\n\nHINT<span class=\"p\">:</span> Add <span class=\"ow\">or</span> change a related_name argument to the definition <span class=\"k\">for</span>\n<span class=\"s1\">&#39;Supplier.customers&#39;</span> <span class=\"ow\">or</span> <span class=\"s1\">&#39;Supplier.place_ptr&#39;</span><span class=\"o\">.</span>\n</code></pre></div>\n<p>Dodanie <code class=\"docutils literal notranslate\">related_name</code> do pola <code class=\"docutils literal notranslate\">customers</code> w ten sposób rozwiązałoby problem: <code class=\"docutils literal notranslate\">models.ManyToManyField(Place, related_name='provider')</code>.</p>\n</section>\n<section id=\"specifying-the-parent-link-field\">\n<h4>Określanie pola połączenia z rodzicem<a class=\"heading-anchor\" href=\"#specifying-the-parent-link-field\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>As mentioned, Django will automatically create a\n<a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\">OneToOneField</code></a> linking your child\nclass back to any non-abstract parent models. If you want to control the\nname of the attribute linking back to the parent, you can create your\nown <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\">OneToOneField</code></a> and set\n<a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.OneToOneField.parent_link\" title=\"django.db.models.OneToOneField.parent_link\"><code class=\"xref py py-attr docutils literal notranslate\">parent_link=True</code></a>\nto indicate that your field is the link back to the parent class.</p>\n</section>\n</section>\n<section id=\"proxy-models\">\n<span id=\"id10\"></span><h3>Proxy models<a class=\"heading-anchor\" href=\"#proxy-models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>When using <a class=\"reference internal\" href=\"#multi-table-inheritance\"><span class=\"std std-ref\">multi-table inheritance</span></a>, a new\ndatabase table is created for each subclass of a model. This is usually the\ndesired behavior, since the subclass needs a place to store any additional\ndata fields that are not present on the base class. Sometimes, however, you\nonly want to change the Python behavior of a model – perhaps to change the\ndefault manager, or add a new method.</p>\n<p>This is what proxy model inheritance is for: creating a <em>proxy</em> for the\noriginal model. You can create, delete and update instances of the proxy model\nand all the data will be saved as if you were using the original (non-proxied)\nmodel. The difference is that you can change things like the default model\nordering or the default manager in the proxy, without having to alter the\noriginal.</p>\n<p>Proxy models are declared like normal models. You tell Django that it’s a\nproxy model by setting the <a class=\"reference internal\" href=\"/pl/2.0/ref/models/options/#django.db.models.Options.proxy\" title=\"django.db.models.Options.proxy\"><code class=\"xref py py-attr docutils literal notranslate\">proxy</code></a> attribute of\nthe <code class=\"docutils literal notranslate\">Meta</code> class to <code class=\"docutils literal notranslate\">True</code>.</p>\n<p>For example, suppose you want to add a method to the <code class=\"docutils literal notranslate\">Person</code> model. You can do it like this:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"k\">class</span> <span class=\"nc\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    first_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    last_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">MyPerson</span><span class=\"p\">(</span>Person<span class=\"p\">):</span>\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        proxy <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">do_something</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># ...</span>\n        <span class=\"k\">pass</span>\n</code></pre></div>\n<p>The <code class=\"docutils literal notranslate\">MyPerson</code> class operates on the same database table as its parent\n<code class=\"docutils literal notranslate\">Person</code> class. In particular, any new instances of <code class=\"docutils literal notranslate\">Person</code> will also be\naccessible through <code class=\"docutils literal notranslate\">MyPerson</code>, and vice-versa:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>p <span class=\"o\">=</span> Person<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>first_name<span class=\"o\">=</span><span class=\"s2\">&quot;foobar&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>MyPerson<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>first_name<span class=\"o\">=</span><span class=\"s2\">&quot;foobar&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;MyPerson: foobar&gt;</span>\n</code></pre></div>\n<p>You could also use a proxy model to define a different default ordering on\na model. You might not always want to order the <code class=\"docutils literal notranslate\">Person</code> model, but regularly\norder by the <code class=\"docutils literal notranslate\">last_name</code> attribute when you use the proxy. This is easy:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">OrderedPerson</span><span class=\"p\">(</span>Person<span class=\"p\">):</span>\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        ordering <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">]</span>\n        proxy <span class=\"o\">=</span> <span class=\"kc\">True</span>\n</code></pre></div>\n<p>Now normal <code class=\"docutils literal notranslate\">Person</code> queries will be unordered\nand <code class=\"docutils literal notranslate\">OrderedPerson</code> queries will be ordered by <code class=\"docutils literal notranslate\">last_name</code>.</p>\n<p>Proxy models inherit <code class=\"docutils literal notranslate\">Meta</code> attributes <a class=\"reference internal\" href=\"#meta-and-multi-table-inheritance\"><span class=\"std std-ref\">in the same way as regular\nmodels</span></a>.</p>\n<section id=\"querysets-still-return-the-model-that-was-requested\">\n<h4><code class=\"docutils literal notranslate\">QuerySet</code>s still return the model that was requested<a class=\"heading-anchor\" href=\"#querysets-still-return-the-model-that-was-requested\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>There is no way to have Django return, say, a <code class=\"docutils literal notranslate\">MyPerson</code> object whenever you\nquery for <code class=\"docutils literal notranslate\">Person</code> objects. A queryset for <code class=\"docutils literal notranslate\">Person</code> objects will return\nthose types of objects. The whole point of proxy objects is that code relying\non the original <code class=\"docutils literal notranslate\">Person</code> will use those and your own code can use the\nextensions you included (that no other code is relying on anyway). It is not\na way to replace the <code class=\"docutils literal notranslate\">Person</code> (or any other) model everywhere with something\nof your own creation.</p>\n</section>\n<section id=\"base-class-restrictions\">\n<h4>Base class restrictions<a class=\"heading-anchor\" href=\"#base-class-restrictions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>A proxy model must inherit from exactly one non-abstract model class. You\ncan’t inherit from multiple non-abstract models as the proxy model doesn’t\nprovide any connection between the rows in the different database tables. A\nproxy model can inherit from any number of abstract model classes, providing\nthey do <em>not</em> define any model fields. A proxy model may also inherit from any\nnumber of proxy models that share a common non-abstract parent class.</p>\n</section>\n<section id=\"proxy-model-managers\">\n<h4>Proxy model managers<a class=\"heading-anchor\" href=\"#proxy-model-managers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>If you don’t specify any model managers on a proxy model, it inherits the\nmanagers from its model parents. If you define a manager on the proxy model,\nit will become the default, although any managers defined on the parent\nclasses will still be available.</p>\n<p>Continuing our example from above, you could change the default manager used\nwhen you query the <code class=\"docutils literal notranslate\">Person</code> model like this:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"k\">class</span> <span class=\"nc\">NewManager</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Manager<span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"k\">pass</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">MyPerson</span><span class=\"p\">(</span>Person<span class=\"p\">):</span>\n    objects <span class=\"o\">=</span> NewManager<span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        proxy <span class=\"o\">=</span> <span class=\"kc\">True</span>\n</code></pre></div>\n<p>If you wanted to add a new manager to the Proxy, without replacing the\nexisting default, you can use the techniques described in the <a class=\"reference internal\" href=\"/pl/2.0/topics/db/managers/#custom-managers-and-inheritance\"><span class=\"std std-ref\">custom\nmanager</span></a> documentation: create a base class\ncontaining the new managers and inherit that after the primary base class:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Create an abstract class for the new manager.</span>\n<span class=\"k\">class</span> <span class=\"nc\">ExtraManagers</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    secondary <span class=\"o\">=</span> NewManager<span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        abstract <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">MyPerson</span><span class=\"p\">(</span>Person<span class=\"p\">,</span> ExtraManagers<span class=\"p\">):</span>\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        proxy <span class=\"o\">=</span> <span class=\"kc\">True</span>\n</code></pre></div>\n<p>You probably won’t need to do this very often, but, when you do, it’s\npossible.</p>\n</section>\n<section id=\"differences-between-proxy-inheritance-and-unmanaged-models\">\n<span id=\"proxy-vs-unmanaged-models\"></span><h4>Differences between proxy inheritance and unmanaged models<a class=\"heading-anchor\" href=\"#differences-between-proxy-inheritance-and-unmanaged-models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Proxy model inheritance might look fairly similar to creating an unmanaged\nmodel, using the <a class=\"reference internal\" href=\"/pl/2.0/ref/models/options/#django.db.models.Options.managed\" title=\"django.db.models.Options.managed\"><code class=\"xref py py-attr docutils literal notranslate\">managed</code></a> attribute on a\nmodel’s <code class=\"docutils literal notranslate\">Meta</code> class.</p>\n<p>With careful setting of <a class=\"reference internal\" href=\"/pl/2.0/ref/models/options/#django.db.models.Options.db_table\" title=\"django.db.models.Options.db_table\"><code class=\"xref py py-attr docutils literal notranslate\">Meta.db_table</code></a> you could create an unmanaged model that\nshadows an existing model and adds Python methods to it. However, that would be\nvery repetitive and fragile as you need to keep both copies synchronized if you\nmake any changes.</p>\n<p>On the other hand, proxy models are intended to behave exactly like the model\nthey are proxying for. They are always in sync with the parent model since they\ndirectly inherit its fields and managers.</p>\n<p>The general rules are:</p>\n<ol class=\"arabic simple\">\n<li><p>If you are mirroring an existing model or database table and don’t want\nall the original database table columns, use <code class=\"docutils literal notranslate\">Meta.managed=False</code>.\nThat option is normally useful for modeling database views and tables\nnot under the control of Django.</p></li>\n<li><p>If you are wanting to change the Python-only behavior of a model, but\nkeep all the same fields as in the original, use <code class=\"docutils literal notranslate\">Meta.proxy=True</code>.\nThis sets things up so that the proxy model is an exact copy of the\nstorage structure of the original model when data is saved.</p></li>\n</ol>\n</section>\n</section>\n<section id=\"multiple-inheritance\">\n<span id=\"model-multiple-inheritance-topic\"></span><h3>Multiple inheritance<a class=\"heading-anchor\" href=\"#multiple-inheritance\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Just as with Python’s subclassing, it’s possible for a Django model to inherit\nfrom multiple parent models. Keep in mind that normal Python name resolution\nrules apply. The first base class that a particular name (e.g. <a class=\"reference internal\" href=\"#meta-options\"><span class=\"std std-ref\">Meta</span></a>) appears in will be the one that is used; for example, this\nmeans that if multiple parents contain a <a class=\"reference internal\" href=\"#meta-options\"><span class=\"std std-ref\">Meta</span></a> class,\nonly the first one is going to be used, and all others will be ignored.</p>\n<p>Generally, you won’t need to inherit from multiple parents. The main use-case\nwhere this is useful is for „mix-in” classes: adding a particular extra\nfield or method to every class that inherits the mix-in. Try to keep your\ninheritance hierarchies as simple and straightforward as possible so that you\nwon’t have to struggle to work out where a particular piece of information is\ncoming from.</p>\n<p>Note that inheriting from multiple models that have a common <code class=\"docutils literal notranslate\">id</code> primary\nkey field will raise an error. To properly use multiple inheritance, you can\nuse an explicit <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.AutoField\" title=\"django.db.models.AutoField\"><code class=\"xref py py-class docutils literal notranslate\">AutoField</code></a> in the base models:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">Article</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    article_id <span class=\"o\">=</span> models<span class=\"o\">.</span>AutoField<span class=\"p\">(</span>primary_key<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"o\">...</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">Book</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    book_id <span class=\"o\">=</span> models<span class=\"o\">.</span>AutoField<span class=\"p\">(</span>primary_key<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"o\">...</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">BookReview</span><span class=\"p\">(</span>Book<span class=\"p\">,</span> Article<span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n</code></pre></div>\n<p>Or use a common ancestor to hold the <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.AutoField\" title=\"django.db.models.AutoField\"><code class=\"xref py py-class docutils literal notranslate\">AutoField</code></a>. This\nrequires using an explicit <a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\">OneToOneField</code></a> from each\nparent model to the common ancestor to avoid a clash between the fields that\nare automatically generated and inherited by the child:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">Piece</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">Article</span><span class=\"p\">(</span>Piece<span class=\"p\">):</span>\n    article_piece <span class=\"o\">=</span> models<span class=\"o\">.</span>OneToOneField<span class=\"p\">(</span>Piece<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">,</span> parent_link<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"o\">...</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">Book</span><span class=\"p\">(</span>Piece<span class=\"p\">):</span>\n    book_piece <span class=\"o\">=</span> models<span class=\"o\">.</span>OneToOneField<span class=\"p\">(</span>Piece<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">,</span> parent_link<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"o\">...</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">BookReview</span><span class=\"p\">(</span>Book<span class=\"p\">,</span> Article<span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n</code></pre></div>\n</section>\n<section id=\"field-name-hiding-is-not-permitted\">\n<h3>Field name „hiding” is not permitted<a class=\"heading-anchor\" href=\"#field-name-hiding-is-not-permitted\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>In normal Python class inheritance, it is permissible for a child class to\noverride any attribute from the parent class. In Django, this isn’t usually\npermitted for model fields. If a non-abstract model base class has a field\ncalled <code class=\"docutils literal notranslate\">author</code>, you can’t create another model field or define\nan attribute called <code class=\"docutils literal notranslate\">author</code> in any class that inherits from that base class.</p>\n<p>This restriction doesn’t apply to model fields inherited from an abstract\nmodel. Such fields may be overridden with another field or value, or be removed\nby setting <code class=\"docutils literal notranslate\">field_name = None</code>.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Ostrzeżenie</p>\n<p>Model managers are inherited from abstract base classes. Overriding an\ninherited field which is referenced by an inherited\n<a class=\"reference internal\" href=\"/pl/2.0/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\">Manager</code></a> may cause subtle bugs. See <a class=\"reference internal\" href=\"/pl/2.0/topics/db/managers/#custom-managers-and-inheritance\"><span class=\"std std-ref\">custom\nmanagers and model inheritance</span></a>.</p>\n</aside>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Informacja</p>\n<p>Some fields define extra attributes on the model, e.g. a\n<a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a> defines an extra attribute with\n<code class=\"docutils literal notranslate\">_id</code> appended to the field name, as well as <code class=\"docutils literal notranslate\">related_name</code> and\n<code class=\"docutils literal notranslate\">related_query_name</code> on the foreign model.</p>\n<p>These extra attributes cannot be overridden unless the field that defines\nit is changed or removed so that it no longer defines the extra attribute.</p>\n</aside>\n<p>Overriding fields in a parent model leads to difficulties in areas such as\ninitializing new instances (specifying which field is being initialized in\n<code class=\"docutils literal notranslate\">Model.__init__</code>) and serialization. These are features which normal Python\nclass inheritance doesn’t have to deal with in quite the same way, so the\ndifference between Django model inheritance and Python class inheritance isn’t\narbitrary.</p>\n<p>This restriction only applies to attributes which are\n<a class=\"reference internal\" href=\"/pl/2.0/ref/models/fields/#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\">Field</code></a> instances. Normal Python attributes\ncan be overridden if you wish. It also only applies to the name of the\nattribute as Python sees it: if you are manually specifying the database\ncolumn name, you can have the same column name appearing in both a child and\nan ancestor model for multi-table inheritance (they are columns in two\ndifferent database tables).</p>\n<p>Django will raise a <a class=\"reference internal\" href=\"/pl/2.0/ref/exceptions/#django.core.exceptions.FieldError\" title=\"django.core.exceptions.FieldError\"><code class=\"xref py py-exc docutils literal notranslate\">FieldError</code></a> if you override\nany model field in any ancestor model.</p>\n</section>\n</section>\n<section id=\"organizing-models-in-a-package\">\n<h2>Organizing models in a package<a class=\"heading-anchor\" href=\"#organizing-models-in-a-package\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>The <a class=\"reference internal\" href=\"/pl/2.0/ref/django-admin/#django-admin-startapp\"><code class=\"xref std std-djadmin docutils literal notranslate\">manage.py startapp</code></a> command creates an application\nstructure that includes a <code class=\"docutils literal notranslate\">models.py</code> file. If you have many models,\norganizing them in separate files may be useful.</p>\n<p>To do so, create a <code class=\"docutils literal notranslate\">models</code> package. Remove <code class=\"docutils literal notranslate\">models.py</code> and create a\n<code class=\"docutils literal notranslate\">myapp/models/</code> directory with an <code class=\"docutils literal notranslate\">__init__.py</code> file and the files to\nstore your models. You must import the models in the <code class=\"docutils literal notranslate\">__init__.py</code> file.</p>\n<p>For example, if you had <code class=\"docutils literal notranslate\">organic.py</code> and <code class=\"docutils literal notranslate\">synthetic.py</code> in the <code class=\"docutils literal notranslate\">models</code>\ndirectory:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>myapp/models/__init__.py</code></figcaption><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"myapp/models/__init__.py\"><code><span class=\"kn\">from</span> <span class=\"nn\">.organic</span> <span class=\"kn\">import</span> Person\n<span class=\"kn\">from</span> <span class=\"nn\">.synthetic</span> <span class=\"kn\">import</span> Robot\n</code></pre></figure>\n<p>Explicitly importing each model rather than using <code class=\"docutils literal notranslate\">from .models import *</code>\nhas the advantages of not cluttering the namespace, making code more readable,\nand keeping code analysis tools useful.</p>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">Zobacz także</p>\n<dl class=\"simple\">\n<dt><a class=\"reference internal\" href=\"/pl/2.0/ref/models/\"><span class=\"doc\">The Models Reference</span></a></dt><dd><p>Covers all the model related APIs including model fields, related\nobjects, and <code class=\"docutils literal notranslate\">QuerySet</code>.</p>\n</dd>\n</dl>\n</aside>\n</section>","rootId":"module-django.db.models","toc":[{"title":"Szybki przykład","anchor":"quick-example","children":[]},{"title":"Używanie modeli","anchor":"using-models","children":[]},{"title":"Pola","anchor":"fields","children":[{"title":"Typy pól","anchor":"field-types","children":[]},{"title":"Opcje pól","anchor":"field-options","children":[]},{"title":"Automatyczne pola klucza głównego","anchor":"automatic-primary-key-fields","children":[]},{"title":"Rozwlekłe nazwy pól","anchor":"verbose-field-names","children":[]},{"title":"Relacje","anchor":"relationships","children":[{"title":"Many-to-one relationships","anchor":"many-to-one-relationships","children":[]},{"title":"Many-to-many relationships","anchor":"many-to-many-relationships","children":[]},{"title":"Dodatkowe pola w relacjach wiele-do-wielu","anchor":"extra-fields-on-many-to-many-relationships","children":[]},{"title":"One-to-one relationships","anchor":"one-to-one-relationships","children":[]}]},{"title":"Modele w wielu plikach","anchor":"models-across-files","children":[]},{"title":"Ograniczenia nazw pól","anchor":"field-name-restrictions","children":[]},{"title":"Własne typy pól","anchor":"custom-field-types","children":[]}]},{"title":"Opcje Meta","anchor":"meta-options","children":[]},{"title":"Atrybuty modelu","anchor":"model-attributes","children":[]},{"title":"Metody modelu","anchor":"model-methods","children":[{"title":"Nadpisywanie predefiniowanych metod modelu","anchor":"overriding-predefined-model-methods","children":[]},{"title":"Wykonywanie własnego SQL-a","anchor":"executing-custom-sql","children":[]}]},{"title":"Dziedziczenie modeli","anchor":"model-inheritance","children":[{"title":"Abstrakcyjne klasy bazowe","anchor":"abstract-base-classes","children":[{"title":"Dziedziczenie Meta","anchor":"meta-inheritance","children":[]},{"title":"Bądź ostrożny z related_name i related_query_name","anchor":"be-careful-with-related-name-and-related-query-name","children":[]}]},{"title":"Dziedziczenie wielotabelowe","anchor":"multi-table-inheritance","children":[{"title":"Meta i dziedziczenie wielotabelowe","anchor":"meta-and-multi-table-inheritance","children":[]},{"title":"Dziedziczenie i relacje zwrotne","anchor":"inheritance-and-reverse-relations","children":[]},{"title":"Określanie pola połączenia z rodzicem","anchor":"specifying-the-parent-link-field","children":[]}]},{"title":"Proxy models","anchor":"proxy-models","children":[{"title":"QuerySets still return the model that was requested","anchor":"querysets-still-return-the-model-that-was-requested","children":[]},{"title":"Base class restrictions","anchor":"base-class-restrictions","children":[]},{"title":"Proxy model managers","anchor":"proxy-model-managers","children":[]},{"title":"Differences between proxy inheritance and unmanaged models","anchor":"differences-between-proxy-inheritance-and-unmanaged-models","children":[]}]},{"title":"Multiple inheritance","anchor":"multiple-inheritance","children":[]},{"title":"Field name „hiding” is not permitted","anchor":"field-name-hiding-is-not-permitted","children":[]}]},{"title":"Organizing models in a package","anchor":"organizing-models-in-a-package","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Używanie Django","url":"/pl/2.0/topics/"},{"docname":"topics/db/index","title":"Modele i bazy danych","url":"/pl/2.0/topics/db/"}],"prev":{"docname":"topics/db/index","title":"Modele i bazy danych","url":"/pl/2.0/topics/db/"},"next":{"docname":"topics/db/queries","title":"Making queries","url":"/pl/2.0/topics/db/queries/"},"formats":{"html":"/pl/2.0/topics/db/models/","markdown":"/pl/2.0/topics/db/models.md","json":"/pl/2.0/topics/db/models.json"},"source":"https://github.com/django/django/blob/stable/2.0.x/docs/topics/db/models.txt","official":"https://docs.djangoproject.com/pl/2.0/topics/db/models/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10"],"inLocales":["en","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}