{"title":"Fixturer","version":"5.2","locale":"sv","docname":"topics/db/fixtures","url":"/sv/5.2/topics/db/fixtures/","canonical":"https://djangodocs.dev/sv/5.2/topics/db/fixtures/","summary":"En fixture är en samling filer som innehåller det serialiserade innehållet i databasen.","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\" role=\"note\">\n<p class=\"admonition-title\">Se även</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/sv/5.2/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/5.2/ref/django-admin/#django-admin-dumpdata\"><code class=\"xref std std-djadmin docutils literal notranslate\">manage.py dumpdata</code></a>. Det är också möjligt att generera anpassade fixturer genom att direkt använda <a class=\"reference internal\" href=\"/sv/5.2/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/5.2/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=\"nc\">MyTestCase</span><span class=\"p\">(</span>TestCase<span class=\"p\">):</span>\n    fixtures <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/5.2/howto/initial-data/#initial-data-via-fixtures\"><span class=\"std std-ref\">initial data</span></a> med kommandot <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-loaddata\"><code class=\"xref std std-djadmin docutils literal notranslate\">loaddata</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 loaddata &lt;fixture 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\">fixtures</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/5.2/ref/settings/#std-setting-FIXTURE_DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">FIXTURE_DIRS</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 loaddata mydata.json\n</code></pre></div>\n<p>skulle bara ladda JSON-fixturer som heter <code class=\"docutils literal notranslate\">mydata</code>. Fixturtillägget måste motsvara det registrerade namnet på en <a class=\"reference internal\" href=\"/sv/5.2/topics/serialization/#serialization-formats\"><span class=\"std std-ref\">serializer</span></a> (t.ex. <code class=\"docutils literal notranslate\">json</code> eller <code class=\"docutils literal notranslate\">xml</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 loaddata mydata\n</code></pre></div>\n<p>letar efter alla fixturer av alla fixturtyper som heter <code class=\"docutils literal notranslate\">mydata</code>. Om en fixturkatalog innehåller <code class=\"docutils literal notranslate\">mydata.json</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 loaddata foo/bar/mydata.json\n</code></pre></div>\n<p>söker efter <code class=\"docutils literal notranslate\">&lt;app_label&gt;/fixtures/foo/bar/mydata.json</code> för varje installerat program, <code class=\"docutils literal notranslate\">&lt;dirname&gt;/foo/bar/mydata.json</code> för varje katalog i <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-FIXTURE_DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">FIXTURE_DIRS</code></a>, och den bokstavliga sökvägen <code class=\"docutils literal notranslate\">foo/bar/mydata.json</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 loaddata mammals birds 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=\"nc\">AnimalTestCase</span><span class=\"p\">(</span>TestCase<span class=\"p\">):</span>\n    fixtures <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\">mammals</code> från alla program (i den ordning som programmen definieras i <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>). Därefter laddas alla fixturer med namnet <code class=\"docutils literal notranslate\">fåglar</code>, följt av alla fixturer med namnet <code class=\"docutils literal notranslate\">insekter</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>När fixturfiler bearbetas sparas data i databasen som de är. Modelldefinierade <a class=\"reference internal\" href=\"/sv/5.2/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>-metoder anropas inte, och alla <a class=\"reference internal\" href=\"/sv/5.2/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>- eller <a class=\"reference internal\" href=\"/sv/5.2/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>-signaler anropas med <code class=\"docutils literal notranslate\">raw=True</code> eftersom instansen endast innehåller attribut som är lokala för modellen. Du kan till exempel vilja inaktivera hanterare som kommer åt relaterade fält som inte finns under fixturladdning och som annars skulle ge upphov till ett undantag:</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.models.signals</span> <span class=\"kn\">import</span> post_save\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"kn\">import</span> MyModel\n\n\n<span class=\"k\">def</span> <span class=\"nf\">my_handler</span><span class=\"p\">(</span><span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n    <span class=\"c1\"># disable the handler during fixture loading</span>\n    <span class=\"k\">if</span> kwargs<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\npost_save<span class=\"o\">.</span>connect<span class=\"p\">(</span>my_handler<span class=\"p\">,</span> sender<span class=\"o\">=</span>MyModel<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=\"nn\">functools</span> <span class=\"kn\">import</span> wraps\n\n\n<span class=\"k\">def</span> <span class=\"nf\">disable_for_loaddata</span><span class=\"p\">(</span>signal_handler<span class=\"p\">):</span>\n    <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>signal_handler<span class=\"p\">)</span>\n    <span class=\"k\">def</span> <span class=\"nf\">wrapper</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> kwargs<span class=\"p\">[</span><span class=\"s2\">&quot;raw&quot;</span><span class=\"p\">]:</span>\n            <span class=\"k\">return</span>\n        signal_handler<span class=\"p\">(</span><span class=\"o\">*</span>args<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> wrapper\n\n\n<span class=\"nd\">@disable_for_loaddata</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_handler</span><span class=\"p\">(</span><span class=\"o\">**</span>kwargs<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/5.2/ref/django-admin/#django-admin-loaddata\"><code class=\"xref std std-djadmin docutils literal notranslate\">loaddata</code></a>.</p>\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\">zip</code>, <code class=\"docutils literal notranslate\">gz</code>, <code class=\"docutils literal notranslate\">bz2</code>, <code class=\"docutils literal notranslate\">lzma</code> eller <code class=\"docutils literal notranslate\">xz</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 loaddata mydata.json\n</code></pre></div>\n<p>letar efter något av följande: <code class=\"docutils literal notranslate\">mydata.json</code>, <code class=\"docutils literal notranslate\">mydata.json.zip</code>, <code class=\"docutils literal notranslate\">mydata.json.gz</code>, <code class=\"docutils literal notranslate\">mydata.json.bz2</code>, <code class=\"docutils literal notranslate\">mydata.json.lzma</code> eller <code class=\"docutils literal notranslate\">mydata.json.xz</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\">mydata.json</code> och <code class=\"docutils literal notranslate\">mydata.xml.gz</code> hittades i samma fixturkatalog), kommer fixturinstallationen att avbrytas och alla data som installerats i anropet till <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-loaddata\"><code class=\"xref std std-djadmin docutils literal notranslate\">loaddata</code></a> kommer att tas bort från databasen.</p>\n<aside class=\"admonition-mysql-with-myisam-and-fixtures admonition\" role=\"note\">\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\">DATABASER</code> till exempel har en databas med namnet <code class=\"docutils literal notranslate\">users</code> definierad, namnge fixturen <code class=\"docutils literal notranslate\">mydata.users.json</code> eller <code class=\"docutils literal notranslate\">mydata.users.json.gz</code> och fixturen laddas endast när du anger att du vill ladda data till databasen <code class=\"docutils literal notranslate\">users</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/5.2/topics/"},{"docname":"topics/db/index","title":"Modeller och databaser","url":"/sv/5.2/topics/db/"}],"prev":{"docname":"topics/db/instrumentation","title":"Instrumentering av databaser","url":"/sv/5.2/topics/db/instrumentation/"},"next":{"docname":"topics/db/examples/index","title":"Exempel på användning av API för modellrelationer","url":"/sv/5.2/topics/db/examples/"},"formats":{"html":"/sv/5.2/topics/db/fixtures/","markdown":"/sv/5.2/topics/db/fixtures.md","json":"/sv/5.2/topics/db/fixtures.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/topics/db/fixtures.txt","official":"https://docs.djangoproject.com/sv/5.2/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"]}