{"title":"Ansvariga","version":"6.0","locale":"sv","docname":"topics/db/managers","url":"/sv/6.0/topics/db/managers/","canonical":"https://djangodocs.dev/sv/6.0/topics/db/managers/","summary":"En Manager är det gränssnitt genom vilket databasfrågeoperationer tillhandahålls till Django-modeller.","html":"<h1>Ansvariga<a class=\"heading-anchor\" href=\"#managers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Manager\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Manager</span><a class=\"heading-anchor\" href=\"#django.db.models.Manager\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>En <code class=\"docutils literal notranslate\">Manager</code> är det gränssnitt genom vilket databasfrågeoperationer tillhandahålls till Django-modeller. Det finns minst en <code class=\"docutils literal notranslate\">Manager</code> för varje modell i en Django-applikation.</p>\n<p>Hur klasserna <code class=\"docutils literal notranslate\">Manager</code> fungerar finns dokumenterat i <a class=\"reference internal\" href=\"/sv/6.0/topics/db/queries/\"><span class=\"doc\">Göra förfrågningar</span></a>; detta dokument tar specifikt upp modellalternativ som anpassar <code class=\"docutils literal notranslate\">Manager</code> beteende.</p>\n<section id=\"manager-names\">\n<span id=\"id1\"></span><h2>Namn på chefer<a class=\"heading-anchor\" href=\"#manager-names\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Som standard lägger Django till en <code class=\"docutils literal notranslate\">Manager</code> med namnet <code class=\"docutils literal notranslate\">objects</code> till varje Django modellklass. Men om du vill använda <code class=\"docutils literal notranslate\">objects</code> som fältnamn, eller om du vill använda ett annat namn än <code class=\"docutils literal notranslate\">objects</code> för <code class=\"docutils literal notranslate\">Manager</code>, kan du byta namn på den per modell. Om du vill byta namn på <code class=\"docutils literal notranslate\">Manager</code> för en viss klass definierar du ett klassattribut av typen <code class=\"docutils literal notranslate\">models.Manager()</code> för den modellen. Till exempel:</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\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    <span class=\"c1\"># ...</span>\n    people <span class=\"o\">=</span> models<span class=\"o\">.</span>Manager<span class=\"p\">()</span>\n</code></pre></div>\n<p>Med hjälp av denna exempelmodell kommer <code class=\"docutils literal notranslate\">Person.objects</code> att generera ett <code class=\"docutils literal notranslate\">AttributeError</code> undantag, men <code class=\"docutils literal notranslate\">Person.people.all()</code> kommer att ge en lista över alla <code class=\"docutils literal notranslate\">Person</code> objekt.</p>\n</section>\n<section id=\"custom-managers\">\n<span id=\"id2\"></span><h2>Anpassade chefer<a class=\"heading-anchor\" href=\"#custom-managers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Du kan använda en anpassad <code class=\"docutils literal notranslate\">Manager</code> i en viss modell genom att utöka basklassen <code class=\"docutils literal notranslate\">Manager</code> och instansiera din anpassade <code class=\"docutils literal notranslate\">Manager</code> i din modell.</p>\n<p>Det finns två anledningar till att du vill anpassa en <code class=\"docutils literal notranslate\">Manager</code>: att lägga till extra <code class=\"docutils literal notranslate\">Manager</code>-metoder och/eller att ändra den första <code class=\"docutils literal notranslate\">QuerySet</code> som <code class=\"docutils literal notranslate\">Manager</code> returnerar.</p>\n<section id=\"adding-extra-manager-methods\">\n<h3>Lägga till extra förvaltningsmetoder<a class=\"heading-anchor\" href=\"#adding-extra-manager-methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Att lägga till extra <code class=\"docutils literal notranslate\">Manager</code>-metoder är det bästa sättet att lägga till funktionalitet på ”tabellnivå” i dina modeller. (För funktioner på ”radnivå”, dvs. funktioner som verkar på en enda instans av ett modellobjekt, ska du använda <a class=\"reference internal\" href=\"/sv/6.0/topics/db/models/#model-methods\"><span class=\"std std-ref\">Model methods</span></a>, inte anpassade <code class=\"docutils literal notranslate\">Manager</code>-metoder)</p>\n<p>Till exempel lägger den här anpassade <code class=\"docutils literal notranslate\">Manager</code> till en metod <code class=\"docutils literal notranslate\">with_counts()</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<span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Coalesce\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PollManager</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Manager<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">with_counts</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>annotate<span class=\"p\">(</span>num_responses<span class=\"o\">=</span>Coalesce<span class=\"p\">(</span>models<span class=\"o\">.</span>Count<span class=\"p\">(</span><span class=\"s2\">&quot;response&quot;</span><span class=\"p\">),</span> <span class=\"mi\">0</span><span class=\"p\">))</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">OpinionPoll</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    question <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    objects <span class=\"o\">=</span> PollManager<span class=\"p\">()</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Response</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    poll <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>OpinionPoll<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>I det här exemplet skulle du använda <code class=\"docutils literal notranslate\">OpinionPoll.objects.with_counts()</code> för att få en <code class=\"docutils literal notranslate\">QuerySet</code> av <code class=\"docutils literal notranslate\">OpinionPoll</code>-objekt med det extra attributet <code class=\"docutils literal notranslate\">num_responses</code>.</p>\n<p>En anpassad <code class=\"docutils literal notranslate\">Manager</code>-metod kan returnera vad du vill. Den behöver inte returnera en <code class=\"docutils literal notranslate\">QuerySet</code>.</p>\n<p>En annan sak att notera är att <code class=\"docutils literal notranslate\">Manager</code>-metoder kan komma åt <code class=\"docutils literal notranslate\">self.model</code> för att hämta den modellklass som de är kopplade till.</p>\n</section>\n<section id=\"modifying-a-manager-s-initial-queryset\">\n<h3>Ändra en chefs initiala <code class=\"docutils literal notranslate\">QuerySet</code><a class=\"heading-anchor\" href=\"#modifying-a-manager-s-initial-queryset\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>En <code class=\"docutils literal notranslate\">Manager</code>’s bas <code class=\"docutils literal notranslate\">QuerySet</code> returnerar alla objekt i systemet. Till exempel, med hjälp av denna modell:</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\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    title <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    author <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</code></pre></div>\n<p>…kommer uttalandet <code class=\"docutils literal notranslate\">Book.objects.all()</code> att returnera alla böcker i databasen.</p>\n<p>Du kan åsidosätta en <code class=\"docutils literal notranslate\">Manager</code>’s bas <code class=\"docutils literal notranslate\">QuerySet</code> genom att åsidosätta metoden <code class=\"docutils literal notranslate\">Manager.get_queryset()</code>. <code class=\"docutils literal notranslate\">get_queryset()</code> bör returnera en <code class=\"docutils literal notranslate\">QuerySet</code> med de egenskaper du behöver.</p>\n<p>Till exempel har följande modell <em>två</em> <code class=\"docutils literal notranslate\">Manager</code> - en som returnerar alla objekt och en som bara returnerar böckerna av Roald Dahl:</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\"># First, define the Manager subclass.</span>\n<span class=\"k\">class</span> <span class=\"nc\">DahlBookManager</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Manager<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>get_queryset<span class=\"p\">()</span><span class=\"o\">.</span>filter<span class=\"p\">(</span>author<span class=\"o\">=</span><span class=\"s2\">&quot;Roald Dahl&quot;</span><span class=\"p\">)</span>\n\n\n<span class=\"c1\"># Then hook it into the Book model explicitly.</span>\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    title <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    author <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\n    objects <span class=\"o\">=</span> models<span class=\"o\">.</span>Manager<span class=\"p\">()</span>  <span class=\"c1\"># The default manager.</span>\n    dahl_objects <span class=\"o\">=</span> DahlBookManager<span class=\"p\">()</span>  <span class=\"c1\"># The Dahl-specific manager.</span>\n</code></pre></div>\n<p>Med den här exempelmodellen kommer <code class=\"docutils literal notranslate\">Book.objects.all()</code> att returnera alla böcker i databasen, men <code class=\"docutils literal notranslate\">Book.dahl_objects.all()</code> kommer bara att returnera de som är skrivna av Roald Dahl.</p>\n<p>Eftersom <code class=\"docutils literal notranslate\">get_queryset()</code> returnerar ett <code class=\"docutils literal notranslate\">QuerySet</code>-objekt kan du använda <code class=\"docutils literal notranslate\">filter()</code>, <code class=\"docutils literal notranslate\">exclude()</code> och alla andra <code class=\"docutils literal notranslate\">QuerySet</code>-metoder på det. Så dessa uttalanden är alla lagliga:</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>Book<span class=\"o\">.</span>dahl_objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\nBook<span class=\"o\">.</span>dahl_objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>title<span class=\"o\">=</span><span class=\"s2\">&quot;Matilda&quot;</span><span class=\"p\">)</span>\nBook<span class=\"o\">.</span>dahl_objects<span class=\"o\">.</span>count<span class=\"p\">()</span>\n</code></pre></div>\n<p>Detta exempel visade också på en annan intressant teknik: att använda flera managers på samma modell. Du kan koppla så många <code class=\"docutils literal notranslate\">Manager()</code>-instanser till en modell som du vill. Detta är ett icke-repetitivt sätt att definiera gemensamma ”filter” för dina modeller.</p>\n<p>Till exempel:</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\">AuthorManager</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Manager<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>get_queryset<span class=\"p\">()</span><span class=\"o\">.</span>filter<span class=\"p\">(</span>role<span class=\"o\">=</span><span class=\"s2\">&quot;A&quot;</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">EditorManager</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Manager<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>get_queryset<span class=\"p\">()</span><span class=\"o\">.</span>filter<span class=\"p\">(</span>role<span class=\"o\">=</span><span class=\"s2\">&quot;E&quot;</span><span class=\"p\">)</span>\n\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    role <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><span class=\"p\">{</span><span class=\"s2\">&quot;A&quot;</span><span class=\"p\">:</span> _<span class=\"p\">(</span><span class=\"s2\">&quot;Author&quot;</span><span class=\"p\">),</span> <span class=\"s2\">&quot;E&quot;</span><span class=\"p\">:</span> _<span class=\"p\">(</span><span class=\"s2\">&quot;Editor&quot;</span><span class=\"p\">)})</span>\n    people <span class=\"o\">=</span> models<span class=\"o\">.</span>Manager<span class=\"p\">()</span>\n    authors <span class=\"o\">=</span> AuthorManager<span class=\"p\">()</span>\n    editors <span class=\"o\">=</span> EditorManager<span class=\"p\">()</span>\n</code></pre></div>\n<p>I det här exemplet kan du begära <code class=\"docutils literal notranslate\">Person.authors.all()</code>, <code class=\"docutils literal notranslate\">Person.editors.all()</code> och <code class=\"docutils literal notranslate\">Person.people.all()</code>, vilket ger förutsägbara resultat.</p>\n</section>\n<section id=\"default-managers\">\n<span id=\"id3\"></span><h3>Förvaltare som standard<a class=\"heading-anchor\" href=\"#default-managers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model._default_manager\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">_default_manager</span><a class=\"heading-anchor\" href=\"#django.db.models.Model._default_manager\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Om du använder anpassade <code class=\"docutils literal notranslate\">Manager</code>-objekt, notera att den första <code class=\"docutils literal notranslate\">Manager</code> som Django stöter på (i den ordning de definieras i modellen) har en speciell status. Django tolkar den första <code class=\"docutils literal notranslate\">Manager</code> som definieras i en klass som ”standard” <code class=\"docutils literal notranslate\">Manager</code>, och flera delar av Django (inklusive <a class=\"reference internal\" href=\"/sv/6.0/ref/django-admin/#django-admin-dumpdata\"><code class=\"xref std std-djadmin docutils literal notranslate\">dumpdata</code></a>) kommer att använda den <code class=\"docutils literal notranslate\">Manager</code> exklusivt för den modellen. Som ett resultat är det en bra idé att vara försiktig i ditt val av standardhanterare för att undvika en situation där åsidosättande av <code class=\"docutils literal notranslate\">get_queryset()</code> resulterar i en oförmåga att hämta objekt som du vill arbeta med.</p>\n<p>Du kan ange en anpassad standardhanterare med <code class=\"xref py py-attr docutils literal notranslate\">Meta.default_manager_name &lt;django.db.models.Options.default_manager_name&gt;`</code>.</p>\n<p>Om du skriver kod som måste hantera en okänd modell, t.ex. i en tredjepartsapp som implementerar en generisk vy, ska du använda den här hanteraren (eller <a class=\"reference internal\" href=\"#django.db.models.Model._base_manager\" title=\"django.db.models.Model._base_manager\"><code class=\"xref py py-attr docutils literal notranslate\">_base_manager</code></a>) i stället för att anta att modellen har en <code class=\"docutils literal notranslate\">objects</code>-hanterare.</p>\n</section>\n<section id=\"base-managers\">\n<h3>Baschefer<a class=\"heading-anchor\" href=\"#base-managers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model._base_manager\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">_base_manager</span><a class=\"heading-anchor\" href=\"#django.db.models.Model._base_manager\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<section id=\"using-managers-for-related-object-access\">\n<span id=\"managers-for-related-objects\"></span><h4>Använda chefer för åtkomst till relaterade objekt<a class=\"heading-anchor\" href=\"#using-managers-for-related-object-access\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Som standard använder Django en instans av managerklassen <code class=\"docutils literal notranslate\">Model._base_manager</code> vid åtkomst till relaterade objekt (t.ex. <code class=\"docutils literal notranslate\">choice.question</code>), inte <code class=\"docutils literal notranslate\">_default_manager</code> på det relaterade objektet. Detta beror på att Django måste kunna hämta det relaterade objektet, även om det annars skulle filtreras bort (och därmed vara otillgängligt) av standardhanteraren.</p>\n<p>Om den normala bashanterarklassen (<a class=\"reference internal\" href=\"#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\">django.db.models.Manager</code></a>) inte är lämplig för dina omständigheter kan du berätta för Django vilken klass som ska användas genom att ställa in <a class=\"reference internal\" href=\"/sv/6.0/ref/models/options/#django.db.models.Options.base_manager_name\" title=\"django.db.models.Options.base_manager_name\"><code class=\"xref py py-attr docutils literal notranslate\">Meta.base_manager_name</code></a>.</p>\n<p>Bashanterare används inte vid frågor om relaterade modeller, eller när <a class=\"reference internal\" href=\"/sv/6.0/topics/db/queries/#backwards-related-objects\"><span class=\"std std-ref\">åtkomst till en en-till-man eller många-till-man relation</span></a>. Om till exempel modellen <code class=\"docutils literal notranslate\">Question</code> :ref:` från handledningen &lt;creating-models&gt;` hade ett fält <code class=\"docutils literal notranslate\">deleted</code> och en bashanterare som filtrerar bort instanser med <code class=\"docutils literal notranslate\">deleted=True</code>, skulle en frågeuppsättning som <code class=\"docutils literal notranslate\">Choice.objects.filter(question__name__startswith='What')</code> inkludera val som är relaterade till borttagna frågor.</p>\n</section>\n<section id=\"don-t-filter-away-any-results-in-this-type-of-manager-subclass\">\n<h4>Filtrera inte bort några resultat i den här typen av manager-underklass<a class=\"heading-anchor\" href=\"#don-t-filter-away-any-results-in-this-type-of-manager-subclass\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Denna manager används för att komma åt objekt som är relaterade till från någon annan modell. I dessa situationer måste Django kunna se alla objekt för den modell som hämtas, så att <em>allt</em> som hänvisas till kan hämtas.</p>\n<p>Därför bör du inte åsidosätta <code class=\"docutils literal notranslate\">get_queryset()</code> för att filtrera bort några rader. Om du gör det kommer Django att returnera ofullständiga resultat.</p>\n</section>\n</section>\n<section id=\"calling-custom-queryset-methods-from-the-manager\">\n<span id=\"calling-custom-queryset-methods-from-manager\"></span><h3>Anropa anpassade metoder för <code class=\"docutils literal notranslate\">QuerySet</code> från hanteraren<a class=\"heading-anchor\" href=\"#calling-custom-queryset-methods-from-the-manager\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Medan de flesta metoder från standard <code class=\"docutils literal notranslate\">QuerySet</code> är tillgängliga direkt från <code class=\"docutils literal notranslate\">Manager</code>, är detta endast fallet för de extra metoder som definieras på en anpassad <code class=\"docutils literal notranslate\">QuerySet</code> om du också implementerar dem på <code class=\"docutils literal notranslate\">Manager</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=\"k\">class</span> <span class=\"nc\">PersonQuerySet</span><span class=\"p\">(</span>models<span class=\"o\">.</span>QuerySet<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">authors</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>filter<span class=\"p\">(</span>role<span class=\"o\">=</span><span class=\"s2\">&quot;A&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">editors</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>filter<span class=\"p\">(</span>role<span class=\"o\">=</span><span class=\"s2\">&quot;E&quot;</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PersonManager</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Manager<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> PersonQuerySet<span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>model<span class=\"p\">,</span> using<span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span>_db<span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">authors</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>get_queryset<span class=\"p\">()</span><span class=\"o\">.</span>authors<span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">editors</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>get_queryset<span class=\"p\">()</span><span class=\"o\">.</span>editors<span class=\"p\">()</span>\n\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    role <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><span class=\"p\">{</span><span class=\"s2\">&quot;A&quot;</span><span class=\"p\">:</span> _<span class=\"p\">(</span><span class=\"s2\">&quot;Author&quot;</span><span class=\"p\">),</span> <span class=\"s2\">&quot;E&quot;</span><span class=\"p\">:</span> _<span class=\"p\">(</span><span class=\"s2\">&quot;Editor&quot;</span><span class=\"p\">)})</span>\n    people <span class=\"o\">=</span> PersonManager<span class=\"p\">()</span>\n</code></pre></div>\n<p>I det här exemplet kan du anropa både <code class=\"docutils literal notranslate\">authors()</code> och <code class=\"docutils literal notranslate\">editors()</code> direkt från hanteraren <code class=\"docutils literal notranslate\">Person.people</code>.</p>\n</section>\n<section id=\"creating-a-manager-with-queryset-methods\">\n<span id=\"create-manager-with-queryset-methods\"></span><h3>Skapa en manager med <code class=\"docutils literal notranslate\">QuerySet</code>-metoder<a class=\"heading-anchor\" href=\"#creating-a-manager-with-queryset-methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>I stället för ovanstående tillvägagångssätt som kräver duplicering av metoder på både <code class=\"docutils literal notranslate\">QuerySet</code> och <code class=\"docutils literal notranslate\">Manager</code>, <a class=\"reference internal\" href=\"/sv/6.0/ref/models/querysets/#django.db.models.query.QuerySet.as_manager\" title=\"django.db.models.query.QuerySet.as_manager\"><code class=\"xref py py-meth docutils literal notranslate\">QuerySet.as_manager()</code></a> kan användas för att skapa en instans av <code class=\"docutils literal notranslate\">Manager</code> med en kopia av en anpassad <code class=\"docutils literal notranslate\">QuerySet</code>’s metoder:</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\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n    people <span class=\"o\">=</span> PersonQuerySet<span class=\"o\">.</span>as_manager<span class=\"p\">()</span>\n</code></pre></div>\n<p>Instansen <code class=\"docutils literal notranslate\">Manager</code> som skapas av <a class=\"reference internal\" href=\"/sv/6.0/ref/models/querysets/#django.db.models.query.QuerySet.as_manager\" title=\"django.db.models.query.QuerySet.as_manager\"><code class=\"xref py py-meth docutils literal notranslate\">QuerySet.as_manager()</code></a> kommer att vara praktiskt taget identisk med <code class=\"docutils literal notranslate\">PersonManager</code> från föregående exempel.</p>\n<p>Inte alla <code class=\"docutils literal notranslate\">QuerySet</code> -metoder är meningsfulla på <code class=\"docutils literal notranslate\">Manager</code> -nivån; till exempel förhindrar vi avsiktligt <a class=\"reference internal\" href=\"/sv/6.0/ref/models/querysets/#django.db.models.query.QuerySet.delete\" title=\"django.db.models.query.QuerySet.delete\"><code class=\"xref py py-meth docutils literal notranslate\">QuerySet.delete()</code></a> -metoden från att kopieras till <code class=\"docutils literal notranslate\">Manager</code> -klassen.</p>\n<p>Metoderna kopieras enligt följande regler:</p>\n<ul class=\"simple\">\n<li><p>Publika metoder kopieras som standard.</p></li>\n<li><p>Privata metoder (som börjar med en understrykning) kopieras inte som standard.</p></li>\n<li><p>Metoder med attributet <code class=\"docutils literal notranslate\">queryset_only</code> inställt på <code class=\"docutils literal notranslate\">False</code> kopieras alltid.</p></li>\n<li><p>Metoder med attributet <code class=\"docutils literal notranslate\">queryset_only</code> inställt på <code class=\"docutils literal notranslate\">True</code> kopieras aldrig.</p></li>\n</ul>\n<p>Till exempel:</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\">CustomQuerySet</span><span class=\"p\">(</span>models<span class=\"o\">.</span>QuerySet<span class=\"p\">):</span>\n    <span class=\"c1\"># Available on both Manager and QuerySet.</span>\n    <span class=\"k\">def</span> <span class=\"nf\">public_method</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span>\n\n    <span class=\"c1\"># Available only on QuerySet.</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_private_method</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span>\n\n    <span class=\"c1\"># Available only on QuerySet.</span>\n    <span class=\"k\">def</span> <span class=\"nf\">opted_out_public_method</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span>\n\n    opted_out_public_method<span class=\"o\">.</span>queryset_only <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n    <span class=\"c1\"># Available on both Manager and QuerySet.</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_opted_in_private_method</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span>\n\n    _opted_in_private_method<span class=\"o\">.</span>queryset_only <span class=\"o\">=</span> <span class=\"kc\">False</span>\n</code></pre></div>\n<section id=\"from-queryset\">\n<h4><code class=\"docutils literal notranslate\">from_queryset()</code><a class=\"heading-anchor\" href=\"#from-queryset\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.from_queryset\">\n<em class=\"property\"><span class=\"k\">classmethod</span> </em><span class=\"sig-name descname\">from_queryset</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">queryset_class</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.from_queryset\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>För avancerad användning kanske du vill ha både en anpassad <code class=\"docutils literal notranslate\">Manager</code> och en anpassad <code class=\"docutils literal notranslate\">QuerySet</code>. Du kan göra det genom att anropa <code class=\"docutils literal notranslate\">Manager.from_queryset()</code> som returnerar en <em>subklass</em> av din bas <code class=\"docutils literal notranslate\">Manager</code> med en kopia av de anpassade <code class=\"docutils literal notranslate\">QuerySet</code> metoderna:</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\">CustomManager</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Manager<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">manager_only_method</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">CustomQuerySet</span><span class=\"p\">(</span>models<span class=\"o\">.</span>QuerySet<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">manager_and_queryset_method</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MyModel</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    objects <span class=\"o\">=</span> CustomManager<span class=\"o\">.</span>from_queryset<span class=\"p\">(</span>CustomQuerySet<span class=\"p\">)()</span>\n</code></pre></div>\n<p>Du kan också lagra den genererade klassen i en variabel:</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>MyManager <span class=\"o\">=</span> CustomManager<span class=\"o\">.</span>from_queryset<span class=\"p\">(</span>CustomQuerySet<span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MyModel</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    objects <span class=\"o\">=</span> MyManager<span class=\"p\">()</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"custom-managers-and-model-inheritance\">\n<span id=\"custom-managers-and-inheritance\"></span><h3>Anpassade förvaltare och modellarv<a class=\"heading-anchor\" href=\"#custom-managers-and-model-inheritance\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Så här hanterar Django egna managers och <a class=\"reference internal\" href=\"/sv/6.0/topics/db/models/#model-inheritance\"><span class=\"std std-ref\">modellarv</span></a>:</p>\n<ol class=\"arabic simple\">\n<li><p>Hanterare från basklasser ärvs alltid av underklassen, med Pythons normala namnupplösningsordning (namn på underklassen åsidosätter alla andra; sedan kommer namn på den första föräldraklassen, och så vidare).</p></li>\n<li><p>Om inga managers deklareras på en modell och/eller dess föräldrar skapar Django automatiskt manager <code class=\"docutils literal notranslate\">objects</code>.</p></li>\n<li><p>Standardhanteraren för en klass är antingen den som valts med <a class=\"reference internal\" href=\"/sv/6.0/ref/models/options/#django.db.models.Options.default_manager_name\" title=\"django.db.models.Options.default_manager_name\"><code class=\"xref py py-attr docutils literal notranslate\">Meta.default_manager_name</code></a>, eller den första hanteraren som deklarerats på modellen, eller standardhanteraren för den första överordnade modellen.</p></li>\n</ol>\n<p>Dessa regler ger den flexibilitet som krävs om du vill installera en samling anpassade hanterare på en grupp modeller, via en abstrakt basklass, men ändå anpassa standardhanteraren. Anta till exempel att du har den här basklassen:</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\">AbstractBase</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    objects <span class=\"o\">=</span> CustomManager<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</code></pre></div>\n<p>Om du använder detta direkt i en underordnad klass kommer <code class=\"docutils literal notranslate\">objects</code> att vara standardhanteraren om du inte deklarerar några hanterare i den underordnade klassen:</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\">ChildA</span><span class=\"p\">(</span>AbstractBase<span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"c1\"># This class has CustomManager as the default manager.</span>\n    <span class=\"k\">pass</span>\n</code></pre></div>\n<p>Om du vill ärva från <code class=\"docutils literal notranslate\">AbstractBase</code>, men tillhandahålla en annan standardhanterare, kan du ange standardhanteraren på barnklassen:</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\">ChildB</span><span class=\"p\">(</span>AbstractBase<span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"c1\"># An explicit default manager.</span>\n    default_manager <span class=\"o\">=</span> OtherManager<span class=\"p\">()</span>\n</code></pre></div>\n<p>Här är <code class=\"docutils literal notranslate\">default_manager</code> standard. Hanteraren <code class=\"docutils literal notranslate\">objects</code> är fortfarande tillgänglig, eftersom den ärvs, men används inte som standard.</p>\n<p>Slutligen för det här exemplet, anta att du vill lägga till extra chefer i barnklassen, men fortfarande använda standard från <code class=\"docutils literal notranslate\">AbstractBase</code>. Du kan inte lägga till den nya hanteraren direkt i barnklassen, eftersom det skulle åsidosätta standardvärdet och du måste också uttryckligen inkludera alla hanterare från den abstrakta basklassen. Lösningen är att lägga de extra förvaltarna i en annan basklass och införa den i arvshierarkin <em>efter</em> standardvärdena:</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\">ExtraManager</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    extra_manager <span class=\"o\">=</span> OtherManager<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\n<span class=\"k\">class</span> <span class=\"nc\">ChildC</span><span class=\"p\">(</span>AbstractBase<span class=\"p\">,</span> ExtraManager<span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"c1\"># Default manager is CustomManager, but OtherManager is</span>\n    <span class=\"c1\"># also available via the &quot;extra_manager&quot; attribute.</span>\n    <span class=\"k\">pass</span>\n</code></pre></div>\n<p>Observera att även om du kan <em>definiera</em> en anpassad manager på den abstrakta modellen, kan du inte <em>invoke</em> några metoder som använder den abstrakta modellen. Det vill säga:</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>ClassA<span class=\"o\">.</span>objects<span class=\"o\">.</span>do_something<span class=\"p\">()</span>\n</code></pre></div>\n<p>är lagligt, men:</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>AbstractBase<span class=\"o\">.</span>objects<span class=\"o\">.</span>do_something<span class=\"p\">()</span>\n</code></pre></div>\n<p>kommer att ge upphov till ett undantag. Detta beror på att managers är avsedda att kapsla in logik för att hantera samlingar av objekt. Eftersom du inte kan ha en samling av abstrakta objekt är det inte meningsfullt att hantera dem. Om du har funktionalitet som gäller för den abstrakta modellen bör du lägga den funktionaliteten i en <code class=\"docutils literal notranslate\">staticmethod</code> eller <code class=\"docutils literal notranslate\">classmethod</code> på den abstrakta modellen.</p>\n</section>\n<section id=\"implementation-concerns\">\n<h3>Problem med genomförandet<a class=\"heading-anchor\" href=\"#implementation-concerns\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Oavsett vilka funktioner du lägger till i din anpassade <code class=\"docutils literal notranslate\">Manager</code> måste det vara möjligt att göra en ytlig kopia av en <code class=\"docutils literal notranslate\">Manager</code>-instans, dvs. följande kod måste fungera:</p>\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><span class=\"kn\">import</span> <span class=\"nn\">copy</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>manager <span class=\"o\">=</span> MyManager<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>my_copy <span class=\"o\">=</span> copy<span class=\"o\">.</span>copy<span class=\"p\">(</span>manager<span class=\"p\">)</span>\n</code></pre></div>\n<p>Django gör ytliga kopior av managerobjekt under vissa frågor; om din manager inte kan kopieras kommer dessa frågor att misslyckas.</p>\n<p>Detta kommer inte att vara ett problem för de flesta anpassade förvaltare. Om du bara lägger till enkla metoder till din <code class=\"docutils literal notranslate\">Manager</code> är det osannolikt att du oavsiktligt kommer att göra instanser av din <code class=\"docutils literal notranslate\">Manager</code> okopierbara. Men om du åsidosätter <code class=\"docutils literal notranslate\">__getattr__</code> eller någon annan privat metod i ditt <code class=\"docutils literal notranslate\">Manager</code>-objekt som kontrollerar objektets tillstånd, bör du se till att du inte påverkar möjligheten för din <code class=\"docutils literal notranslate\">Manager</code> att kopieras.</p>\n</section>\n</section>","rootId":"managers","toc":[{"title":"Namn på chefer","anchor":"manager-names","children":[]},{"title":"Anpassade chefer","anchor":"custom-managers","children":[{"title":"Lägga till extra förvaltningsmetoder","anchor":"adding-extra-manager-methods","children":[]},{"title":"Ändra en chefs initiala QuerySet","anchor":"modifying-a-manager-s-initial-queryset","children":[]},{"title":"Förvaltare som standard","anchor":"default-managers","children":[]},{"title":"Baschefer","anchor":"base-managers","children":[{"title":"Använda chefer för åtkomst till relaterade objekt","anchor":"using-managers-for-related-object-access","children":[]},{"title":"Filtrera inte bort några resultat i den här typen av manager-underklass","anchor":"don-t-filter-away-any-results-in-this-type-of-manager-subclass","children":[]}]},{"title":"Anropa anpassade metoder för QuerySet från hanteraren","anchor":"calling-custom-queryset-methods-from-the-manager","children":[]},{"title":"Skapa en manager med QuerySet-metoder","anchor":"creating-a-manager-with-queryset-methods","children":[{"title":"from_queryset()","anchor":"from-queryset","children":[]}]},{"title":"Anpassade förvaltare och modellarv","anchor":"custom-managers-and-model-inheritance","children":[]},{"title":"Problem med genomförandet","anchor":"implementation-concerns","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Använda Django","url":"/sv/6.0/topics/"},{"docname":"topics/db/index","title":"Modeller och databaser","url":"/sv/6.0/topics/db/"}],"prev":{"docname":"topics/db/search","title":"Sök","url":"/sv/6.0/topics/db/search/"},"next":{"docname":"topics/db/sql","title":"Utföra SQL-frågor i råformat","url":"/sv/6.0/topics/db/sql/"},"formats":{"html":"/sv/6.0/topics/db/managers/","markdown":"/sv/6.0/topics/db/managers.md","json":"/sv/6.0/topics/db/managers.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/topics/db/managers.txt","official":"https://docs.djangoproject.com/sv/6.0/topics/db/managers/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}