{"title":"Fixturer","version":"6.1","locale":"sv","docname":"topics/db/fixtures","url":"/sv/6.1/topics/db/fixtures/","canonical":"https://djangodocs.dev/sv/6.1/topics/db/fixtures/","summary":"En fixture är en samling filer som innehåller det serialiserade innehållet i databasen. Varje fixtur har ett unikt namn och filerna som fixturen består av kan…","html":"<span id=\"fixtures-explanation\"></span><h1>Fixturer<a class=\"heading-anchor\" href=\"#fixtures\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>En <em>fixture</em> är en samling filer som innehåller det serialiserade innehållet i databasen. Varje fixtur har ett unikt namn och filerna som fixturen består av kan distribueras över flera kataloger i flera applikationer.</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Se även</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/sv/6.1/howto/initial-data/\"><span class=\"doc\">Hur man tillhandahåller initiala data för modeller</span></a></p></li>\n</ul>\n</aside>\n<section id=\"how-to-produce-a-fixture\">\n<h2>Hur man tillverkar en fixtur<a class=\"heading-anchor\" href=\"#how-to-produce-a-fixture\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Fixturer kan genereras med <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django-admin-dumpdata\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">manage.py</span> <span class=\"pre\">dumpdata</span></code></a>. Det är också möjligt att generera anpassade fixturer genom att direkt använda <a class=\"reference internal\" href=\"/sv/6.1/topics/serialization/\"><span class=\"doc\">serialiseringsverktyg</span></a> eller till och med genom att skriva dem för hand.</p>\n</section>\n<section id=\"how-to-use-a-fixture\">\n<h2>Hur man använder en fixtur<a class=\"heading-anchor\" href=\"#how-to-use-a-fixture\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Fixturer kan användas för att i förväg fylla på databasen med data för <a class=\"reference internal\" href=\"/sv/6.1/topics/testing/tools/#topics-testing-fixtures\"><span class=\"std std-ref\">tester</span></a>:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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 code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"n\">fixtures</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;fixture-label&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>eller för att tillhandahålla några <a class=\"reference internal\" href=\"/sv/6.1/howto/initial-data/#initial-data-via-fixtures\"><span class=\"std std-ref\">initial data</span></a> med kommandot <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django-admin-loaddata\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">loaddata</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code>django-admin<span class=\"w\"> </span>loaddata<span class=\"w\"> </span>&lt;fixture<span class=\"w\"> </span>label&gt;\n</code></pre></div>\n</section>\n<section id=\"how-fixtures-are-discovered\">\n<h2>Hur fixturer upptäcks<a class=\"heading-anchor\" href=\"#how-fixtures-are-discovered\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django kommer att söka efter fixturer på dessa platser:</p>\n<ol class=\"arabic simple\">\n<li><p>I katalogen <code class=\"docutils literal notranslate\"><span class=\"pre\">fixtures</span></code> för varje installerad applikation</p></li>\n<li><p>I en katalog som anges i inställningen <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-FIXTURE_DIRS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FIXTURE_DIRS</span></code></a></p></li>\n<li><p>I den bokstavliga sökvägen som anges av fixturen</p></li>\n</ol>\n<p>Django kommer att ladda alla fixturer som den hittar på dessa platser och som matchar de angivna fixturnamnen. Om den namngivna fixturen har ett filtillägg kommer endast fixturer av den typen att laddas. Till exempel:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code>django-admin<span class=\"w\"> </span>loaddata<span class=\"w\"> </span>mydata.json\n</code></pre></div>\n<p>skulle bara ladda JSON-fixturer som heter <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata</span></code>. Fixturtillägget måste motsvara det registrerade namnet på en <a class=\"reference internal\" href=\"/sv/6.1/topics/serialization/#serialization-formats\"><span class=\"std std-ref\">serializer</span></a> (t.ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">json</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">xml</span></code>).</p>\n<p>Om du utelämnar tilläggen kommer Django att söka efter en matchande fixtur i alla tillgängliga fixturtyper. Till exempel:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code>django-admin<span class=\"w\"> </span>loaddata<span class=\"w\"> </span>mydata\n</code></pre></div>\n<p>letar efter alla fixturer av alla fixturtyper som heter <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata</span></code>. Om en fixturkatalog innehåller <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata.json</span></code> laddas den fixturen som en JSON-fixtur.</p>\n<p>De namngivna fixturerna kan innehålla katalogkomponenter. Dessa kataloger kommer att inkluderas i sökvägen. Ett exempel:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code>django-admin<span class=\"w\"> </span>loaddata<span class=\"w\"> </span>foo/bar/mydata.json\n</code></pre></div>\n<p>söker efter <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;app_label&gt;/fixtures/foo/bar/mydata.json</span></code> för varje installerat program, <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;dirname&gt;/foo/bar/mydata.json</span></code> för varje katalog i <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-FIXTURE_DIRS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FIXTURE_DIRS</span></code></a>, och den bokstavliga sökvägen <code class=\"docutils literal notranslate\"><span class=\"pre\">foo/bar/mydata.json</span></code>.</p>\n<section id=\"fixtures-loading-order\">\n<h3>Lastningsordning för fixturer<a class=\"heading-anchor\" href=\"#fixtures-loading-order\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Flera fixturer kan anges i samma anrop. Till exempel:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code>django-admin<span class=\"w\"> </span>loaddata<span class=\"w\"> </span>mammals<span class=\"w\"> </span>birds<span class=\"w\"> </span>insects\n</code></pre></div>\n<p>eller i en testfallsklass:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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 code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AnimalTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"n\">fixtures</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;mammals&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;birds&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;insects&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>Den ordning i vilken fixturerna laddas följer den ordning i vilken de listas, oavsett om det är när du använder management-kommandot eller när du listar dem i testfallsklassen enligt ovan.</p>\n<p>I dessa exempel laddas först alla fixturer med namnet <code class=\"docutils literal notranslate\"><span class=\"pre\">mammals</span></code> från alla program (i den ordning som programmen definieras i <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>). Därefter laddas alla fixturer med namnet <code class=\"docutils literal notranslate\"><span class=\"pre\">fåglar</span></code>, följt av alla fixturer med namnet <code class=\"docutils literal notranslate\"><span class=\"pre\">insekter</span></code>.</p>\n<p>Tänk på att om databasens backend stöder begränsningar på radnivå kommer dessa begränsningar att kontrolleras i slutet av transaktionen. Alla relationer över fixturer kan resultera i ett laddningsfel om databaskonfigurationen inte stöder uppskjuten begränsningskontroll (se <a class=\"reference external\" href=\"https://dev.mysql.com/doc/refman/en/constraint-foreign-key.html\">MySQL</a>-dokumenten för ett exempel).</p>\n</section>\n</section>\n<section id=\"how-fixtures-are-saved-to-the-database\">\n<h2>Hur fixturer sparas i databasen<a class=\"heading-anchor\" href=\"#how-fixtures-are-saved-to-the-database\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>When fixture files are processed, the data is saved to the database as is.\nModel defined <a class=\"reference internal\" href=\"/sv/6.1/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a> methods are not called, and\nany <a class=\"reference internal\" href=\"/sv/6.1/ref/signals/#django.db.models.signals.pre_save\" title=\"django.db.models.signals.pre_save\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">pre_save</span></code></a>,\n<a class=\"reference internal\" href=\"/sv/6.1/ref/signals/#django.db.models.signals.post_save\" title=\"django.db.models.signals.post_save\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">post_save</span></code></a>, or\n<a class=\"reference internal\" href=\"/sv/6.1/ref/signals/#django.db.models.signals.m2m_changed\" title=\"django.db.models.signals.m2m_changed\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">m2m_changed</span></code></a> signals will be called with\n<code class=\"docutils literal notranslate\"><span class=\"pre\">raw=True</span></code> since the instance only contains attributes that are local to the\nmodel. You may, for example, want to disable handlers that access\nrelated fields that aren’t present during fixture loading and would otherwise\nraise an exception:</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=\"w\"> </span><span class=\"nn\">django.db.models.signals</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">post_save</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">MyModel</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_handler</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"c1\"># disable the handler during fixture loading</span>\n    <span class=\"k\">if</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;raw&quot;</span><span class=\"p\">]:</span>\n        <span class=\"k\">return</span>\n    <span class=\"o\">...</span>\n\n\n<span class=\"n\">post_save</span><span class=\"o\">.</span><span class=\"n\">connect</span><span class=\"p\">(</span><span class=\"n\">my_handler</span><span class=\"p\">,</span> <span class=\"n\">sender</span><span class=\"o\">=</span><span class=\"n\">MyModel</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Du kan också skriva en dekorator för att kapsla in denna logik:</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=\"w\"> </span><span class=\"nn\">functools</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">wraps</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">disable_for_loaddata</span><span class=\"p\">(</span><span class=\"n\">signal_handler</span><span class=\"p\">):</span>\n<span class=\"w\">    </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Decorator that turns off signal handlers when loading fixture data.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"nd\">@wraps</span><span class=\"p\">(</span><span class=\"n\">signal_handler</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">wrapper</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;raw&quot;</span><span class=\"p\">]:</span>\n            <span class=\"k\">return</span>\n        <span class=\"n\">signal_handler</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">wrapper</span>\n\n\n<span class=\"nd\">@disable_for_loaddata</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_handler</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p>Tänk bara på att den här logiken kommer att inaktivera signalerna när fixturerna deserialiseras, inte bara under <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django-admin-loaddata\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">loaddata</span></code></a>.</p>\n<aside class=\"version-note version-changed\" data-version=\"6.1\">\n<p class=\"version-note-title\">Changed in Django 6.1</p><p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">raw</span></code> argument was added to <code class=\"docutils literal notranslate\"><span class=\"pre\">m2m_changed</span></code> signals.</p>\n</aside>\n</section>\n<section id=\"compressed-fixtures\">\n<h2>Komprimerade armaturer<a class=\"heading-anchor\" href=\"#compressed-fixtures\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Fixturer kan komprimeras i formaten <code class=\"docutils literal notranslate\"><span class=\"pre\">zip</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">gz</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">bz2</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">lzma</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">xz</span></code>. Till exempel:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code>django-admin<span class=\"w\"> </span>loaddata<span class=\"w\"> </span>mydata.json\n</code></pre></div>\n<p>letar efter något av följande: <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata.json</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata.json.zip</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata.json.gz</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata.json.bz2</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata.json.lzma</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata.json.xz</span></code>. Den första filen i ett komprimerat arkiv används.</p>\n<p>Observera att om två fixturer med samma namn men olika fixturtyp upptäcks (t.ex. om <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata.json</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata.xml.gz</span></code> hittades i samma fixturkatalog), kommer fixturinstallationen att avbrytas och alla data som installerats i anropet till <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django-admin-loaddata\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">loaddata</span></code></a> kommer att tas bort från databasen.</p>\n<aside class=\"admonition-mysql-with-myisam-and-fixtures admonition\">\n<p class=\"admonition-title\">MySQL med MyISAM och fixturer</p>\n<p>MyISAM-lagringsmotorn i MySQL stöder inte transaktioner eller begränsningar, så om du använder MyISAM får du inte validering av fixturdata eller en rollback om flera transaktionsfiler hittas.</p>\n</aside>\n</section>\n<section id=\"database-specific-fixtures\">\n<h2>Databasspecifika fixturer<a class=\"heading-anchor\" href=\"#database-specific-fixtures\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Om du har flera databaser kan det hända att du har fixturdata som du vill ladda i en databas, men inte i en annan. I den här situationen kan du lägga till en databasidentifierare i namnen på dina fixturer.</p>\n<p>Om inställningen <code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASER</span></code> till exempel har en databas med namnet <code class=\"docutils literal notranslate\"><span class=\"pre\">users</span></code> definierad, namnge fixturen <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata.users.json</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata.users.json.gz</span></code> och fixturen laddas endast när du anger att du vill ladda data till databasen <code class=\"docutils literal notranslate\"><span class=\"pre\">users</span></code>.</p>\n</section>","rootId":"fixtures","toc":[{"title":"Hur man tillverkar en fixtur","anchor":"how-to-produce-a-fixture","children":[]},{"title":"Hur man använder en fixtur","anchor":"how-to-use-a-fixture","children":[]},{"title":"Hur fixturer upptäcks","anchor":"how-fixtures-are-discovered","children":[{"title":"Lastningsordning för fixturer","anchor":"fixtures-loading-order","children":[]}]},{"title":"Hur fixturer sparas i databasen","anchor":"how-fixtures-are-saved-to-the-database","children":[]},{"title":"Komprimerade armaturer","anchor":"compressed-fixtures","children":[]},{"title":"Databasspecifika fixturer","anchor":"database-specific-fixtures","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Använda Django","url":"/sv/6.1/topics/"},{"docname":"topics/db/index","title":"Modeller och databaser","url":"/sv/6.1/topics/db/"}],"prev":{"docname":"topics/db/instrumentation","title":"Instrumentering av databaser","url":"/sv/6.1/topics/db/instrumentation/"},"next":{"docname":"topics/db/examples/index","title":"Exempel på användning av API för modellrelationer","url":"/sv/6.1/topics/db/examples/"},"formats":{"html":"/sv/6.1/topics/db/fixtures/","markdown":"/sv/6.1/topics/db/fixtures.md","json":"/sv/6.1/topics/db/fixtures.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/topics/db/fixtures.txt","official":"https://docs.djangoproject.com/sv/6.1/topics/db/fixtures/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}