{"title":"Comhaid a bhainistiú","version":"6.1","locale":"ga","docname":"topics/files","url":"/ga/6.1/topics/files/","canonical":"https://djangodocs.dev/ga/6.1/topics/files/","summary":"Déanann an doiciméad seo cur síos ar APIs rochtana comhaid Django do chomhaid mar iad siúd a uaslódálann úsáideoir Tá na APIs leibhéal níos ísle ginearálta…","html":"<h1>Comhaid a bhainistiú<a class=\"heading-anchor\" href=\"#managing-files\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Déanann an doiciméad seo cur síos ar APIs rochtana comhaid Django do chomhaid mar iad siúd a uaslódálann úsáideoir Tá na APIs leibhéal níos ísle ginearálta go leor gur féidir leat iad a úsáid chun críocha eile. Más mian leat “comhaid statacha” a láimhseáil (JS, CSS, srl.), Féach: doc: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>/howto/static-files/index <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</p>\n<p>De réir réamhshocraithe, stóráilíonn Django comhaid go háitiúil, ag baint úsáide as socruithe:: MEDIA_ROOT agus:setting: MEDIA_URL. Glacann na samplaí thíos leis go bhfuil na réamhshocruithe seo á úsáid agat.</p>\n<p>Mar sin féin, soláthraíonn Django bealaí chun <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>córais stórála comhad <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>_ saincheaptha a scríobh a ligeann duit cá háit agus conas a stórálann Django comhaid a shaincheapadh go hiomlán. Déanann an dara leath den doiciméad seo cur síos ar conas a oibríonn na córais stórála</p>\n<section id=\"using-files-in-models\">\n<h2>Comhaid a úsáid i samhlacha<a class=\"heading-anchor\" href=\"#using-files-in-models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Nuair a úsáideann tú a:class: ~django.db.models.filefield nó:class: ~django.db.models.imagefield, soláthraíonn Django sraith APIs is féidir leat a úsáid chun déileáil leis an gcomhad sin.</p>\n<p>Smaoinigh ar an tsamhail seo a leanas, ag baint úsáide as an:class: ~django.db.models.imagefield chun grianghraf a stóráil:</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\">Car</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\">255</span><span class=\"p\">)</span>\n    price <span class=\"o\">=</span> models<span class=\"o\">.</span>DecimalField<span class=\"p\">(</span>max_digits<span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">,</span> decimal_places<span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n    photo <span class=\"o\">=</span> models<span class=\"o\">.</span>ImageField<span class=\"p\">(</span>upload_to<span class=\"o\">=</span><span class=\"s2\">&quot;cars&quot;</span><span class=\"p\">)</span>\n    specs <span class=\"o\">=</span> models<span class=\"o\">.</span>FileField<span class=\"p\">(</span>upload_to<span class=\"o\">=</span><span class=\"s2\">&quot;specs&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Beidh tréith <code class=\"docutils literal notranslate\">grianghraf ``ag aon shampla ``Car</code> is féidir leat a úsáid chun sonraí an ghrianghraf ceangailte a fháil:</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>car <span class=\"o\">=</span> Car<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;57 Chevy&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>car<span class=\"o\">.</span>photo\n<span class=\"go\">&lt;ImageFieldFile: cars/chevy.jpg&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>car<span class=\"o\">.</span>photo<span class=\"o\">.</span>name\n<span class=\"go\">&#39;cars/chevy.jpg&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>car<span class=\"o\">.</span>photo<span class=\"o\">.</span>path\n<span class=\"go\">&#39;/media/cars/chevy.jpg&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>car<span class=\"o\">.</span>photo<span class=\"o\">.</span>url\n<span class=\"go\">&#39;https://media.example.com/cars/chevy.jpg&#39;</span>\n</code></pre></div>\n<p>Is réad “Comhad” é an réad seo - <code class=\"docutils literal notranslate\">car.photo</code> sa sampla -- réad <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Comhad <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>, rud a chiallaíonn go bhfuil na modhanna agus na tréithe go léir a thuairiscítear thíos aige.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Sábháiltear an comhad mar chuid den tsamhail a shábháil sa bhunachar sonraí, mar sin ní féidir brath ar an ainm comhaid iarbhír a úsáidtear ar dhiosca go dtí go ndéanfar an tsamhail a shábháil.</p>\n</aside>\n<p>Mar shampla, is féidir leat ainm an chomhaid a athrú tríd an comhad a shocrú 's:attr: ~django.core.files.name go cosán i gcoibhneas le suíomh stórála an chomhaid (:setting: MEDIA_ROOT má tá an réamhshocraithe:class: ~django.core.files.storage.fileSystemStorage):</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\">os</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.conf</span> <span class=\"kn\">import</span> settings\n<span class=\"gp\">&gt;&gt;&gt; </span>initial_path <span class=\"o\">=</span> car<span class=\"o\">.</span>photo<span class=\"o\">.</span>path\n<span class=\"gp\">&gt;&gt;&gt; </span>car<span class=\"o\">.</span>photo<span class=\"o\">.</span>name <span class=\"o\">=</span> <span class=\"s2\">&quot;cars/chevy_ii.jpg&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>new_path <span class=\"o\">=</span> os<span class=\"o\">.</span>path<span class=\"o\">.</span>join<span class=\"p\">(</span>settings<span class=\"o\">.</span>MEDIA_ROOT<span class=\"p\">,</span> car<span class=\"o\">.</span>photo<span class=\"o\">.</span>name<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Move the file on the filesystem</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>os<span class=\"o\">.</span>rename<span class=\"p\">(</span>initial_path<span class=\"p\">,</span> new_path<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>car<span class=\"o\">.</span>save<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>car<span class=\"o\">.</span>photo<span class=\"o\">.</span>path\n<span class=\"go\">&#39;/media/cars/chevy_ii.jpg&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>car<span class=\"o\">.</span>photo<span class=\"o\">.</span>path <span class=\"o\">==</span> new_path\n<span class=\"go\">True</span>\n</code></pre></div>\n<p>Chun comhad atá ann cheana a shábháil ar dhiosca chuig a:class: ~Django.db.Models.FileField:</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\">from</span> <span class=\"nn\">pathlib</span> <span class=\"kn\">import</span> Path\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.core.files</span> <span class=\"kn\">import</span> File\n<span class=\"gp\">&gt;&gt;&gt; </span>path <span class=\"o\">=</span> Path<span class=\"p\">(</span><span class=\"s2\">&quot;/some/external/specs.pdf&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>car <span class=\"o\">=</span> Car<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;57 Chevy&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">with</span> path<span class=\"o\">.</span>open<span class=\"p\">(</span>mode<span class=\"o\">=</span><span class=\"s2\">&quot;rb&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> f<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    car<span class=\"o\">.</span>specs <span class=\"o\">=</span> File<span class=\"p\">(</span>f<span class=\"p\">,</span> name<span class=\"o\">=</span>path<span class=\"o\">.</span>name<span class=\"p\">)</span>\n<span class=\"gp\">... </span>    car<span class=\"o\">.</span>save<span class=\"p\">()</span>\n<span class=\"gp\">...</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Cé go bhfuil tréithe sonraí neamh-íomhá: Class: ~django.db.models.imagefield ar fáil ar an gcás, mar shampla <code class=\"docutils literal notranslate\">airde ``, `leithead</code>, agus <code class=\"docutils literal notranslate\">size</code> `` `` `` <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>fiú, ní féidir na sonraí íomhá bunúsacha a úsáid gan an íomhá a athoscailt. Mar shampla:</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\">from</span> <span class=\"nn\">PIL</span> <span class=\"kn\">import</span> Image\n<span class=\"gp\">&gt;&gt;&gt; </span>car <span class=\"o\">=</span> Car<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;57 Chevy&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>car<span class=\"o\">.</span>photo<span class=\"o\">.</span>width\n<span class=\"go\">191</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>car<span class=\"o\">.</span>photo<span class=\"o\">.</span>height\n<span class=\"go\">287</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>image <span class=\"o\">=</span> Image<span class=\"o\">.</span>open<span class=\"p\">(</span>car<span class=\"o\">.</span>photo<span class=\"p\">)</span>\n<span class=\"go\"># Raises ValueError: seek of closed file.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>car<span class=\"o\">.</span>photo<span class=\"o\">.</span>open<span class=\"p\">()</span>\n<span class=\"go\">&lt;ImageFieldFile: cars/chevy.jpg&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>image <span class=\"o\">=</span> Image<span class=\"o\">.</span>open<span class=\"p\">(</span>car<span class=\"o\">.</span>photo<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>image\n<span class=\"go\">&lt;PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=191x287 at 0x7F99A94E9048&gt;</span>\n</code></pre></div>\n</aside>\n</section>\n<section id=\"the-file-object\">\n<h2>An réad <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Comhad ``<a class=\"heading-anchor\" href=\"#the-file-object\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Go hinmheánach, úsáideann Django sampla a:class: Django.core.files.file aon uair a theastaíonn uaidh comhad a léiriú.</p>\n<p>An chuid is mó den am úsáidfidh tú <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Comhad <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a thug Django duit (ie comhad atá ceangailte le samhail mar thuas, nó comhad uaslódáilte b'fhéidir).</p>\n<p>Más gá duit <code class=\"docutils literal notranslate\">Comhad ``a thógáil duit féin, is é an bealach is éasca ceann a chruthú ag baint úsáide as réad `comhad</code> ionsuite Python:</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\">from</span> <span class=\"nn\">django.core.files</span> <span class=\"kn\">import</span> File\n\n<span class=\"go\"># Create a Python file object using open()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f <span class=\"o\">=</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s2\">&quot;/path/to/hello.world&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;w&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>myfile <span class=\"o\">=</span> File<span class=\"p\">(</span>f<span class=\"p\">)</span>\n</code></pre></div>\n<p>Anois is féidir leat aon cheann de na tréithe agus na modhanna doiciméadaithe den aicme:class: ~django.core.files.file a úsáid.</p>\n<p>Bí ar an eolas nach ndúntar comhaid a cruthaíodh ar an mbealach seo go huathoibr Is féidir an cur chuige seo a leanas a úsáid chun comhaid a dhúnadh go huathoibr</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\">from</span> <span class=\"nn\">django.core.files</span> <span class=\"kn\">import</span> File\n\n<span class=\"go\"># Create a Python file object using open() and the with statement</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s2\">&quot;/path/to/hello.world&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;w&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> f<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    myfile <span class=\"o\">=</span> File<span class=\"p\">(</span>f<span class=\"p\">)</span>\n<span class=\"gp\">... </span>    myfile<span class=\"o\">.</span>write<span class=\"p\">(</span><span class=\"s2\">&quot;Hello World&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>myfile<span class=\"o\">.</span>closed\n<span class=\"go\">True</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>f<span class=\"o\">.</span>closed\n<span class=\"go\">True</span>\n</code></pre></div>\n<p>Tá sé tábhachtach go háirithe comhaid a dhúnadh agus tú ag teacht ar réimsí comhaid i lúb thar líon mór rudaí. Mura ndúntar comhaid de láimh tar éis rochtain a fháil orthu, d'fhéadfadh an riosca go n-éireoidh amach as tuairiscí comhaid. D'fhéadfadh an earráid seo a leanas a bheith mar thoradh air seo:</p>\n<div class=\"code-block\" data-language=\"pytb\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Pytb</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=\"Pytb code\"><code><span class=\"x\">OSError: [Errno 24] Too many open files</span>\n</code></pre></div>\n</section>\n<section id=\"file-storage\">\n<h2>Stóráil comhad<a class=\"heading-anchor\" href=\"#file-storage\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Taobh thiar de na radhairc, déanann Django cinntí faoi conas agus cá háit a stóráil comhaid chuig córas stórála comhaid. Is é seo an réad a thuigeann rudaí cosúil le córais chomhaid, comhad a oscailt agus a léamh, srl.</p>\n<p>Is é stóráil comhaid réamhshocraithe Django <code class=\"docutils literal notranslate\">`</code>:class: django.core.files.storage.filesystemStorage<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a><code class=\"docutils literal notranslate\">. Mura soláthraíonn tú córas stórála go sainráite san eochair ``réamhshocraithe</code> den socrú:setting: STORAGES, is é seo an ceann a úsáidfear.</p>\n<p>Féach thíos le haghaidh sonraí faoin gcóras stórála comhaid réamhshocraithe ionsuite, agus féach: doc: /howto/custom-file-storage le haghaidh faisnéise maidir le do chóras stórála comhaid féin a scríobh.</p>\n<section id=\"storage-objects\">\n<h3>Rudaí stórála<a class=\"heading-anchor\" href=\"#storage-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Cé go mbeidh tú ag iarraidh réad <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Comhad <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a úsáid an chuid is mó den am (a thosclaíonn chuig an stóráil cheart don chomhad sin), is féidir leat córais stórála comhaid a úsáid go díreach. Is féidir leat sampla de rang stórála comhaid saincheaptha a chruthú, nó - is minic níos úsáideach - is féidir leat an córas stórála réamhshocraithe domhanda a úsáid:</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\">from</span> <span class=\"nn\">django.core.files.base</span> <span class=\"kn\">import</span> ContentFile\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.core.files.storage</span> <span class=\"kn\">import</span> default_storage\n\n<span class=\"gp\">&gt;&gt;&gt; </span>path <span class=\"o\">=</span> default_storage<span class=\"o\">.</span>save<span class=\"p\">(</span><span class=\"s2\">&quot;path/to/file&quot;</span><span class=\"p\">,</span> ContentFile<span class=\"p\">(</span><span class=\"sa\">b</span><span class=\"s2\">&quot;new content&quot;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>path\n<span class=\"go\">&#39;path/to/file&#39;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>default_storage<span class=\"o\">.</span>size<span class=\"p\">(</span>path<span class=\"p\">)</span>\n<span class=\"go\">11</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>default_storage<span class=\"o\">.</span>open<span class=\"p\">(</span>path<span class=\"p\">)</span><span class=\"o\">.</span>read<span class=\"p\">()</span>\n<span class=\"go\">b&#39;new content&#39;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>default_storage<span class=\"o\">.</span>delete<span class=\"p\">(</span>path<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>default_storage<span class=\"o\">.</span>exists<span class=\"p\">(</span>path<span class=\"p\">)</span>\n<span class=\"go\">False</span>\n</code></pre></div>\n<p>Féach: doc: /ref/files/storage don API stórála comhaid.</p>\n</section>\n<section id=\"the-built-in-filesystem-storage-class\">\n<span id=\"builtin-fs-storage\"></span><h3>An rang stórála córas comhaid ionsuite<a class=\"heading-anchor\" href=\"#the-built-in-filesystem-storage-class\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Seolann Django le aicme a:class: django.core.files.storage.filesystemStorage a chuireann stóráil bhunúsach comhaid chórais comhaid áitiúil i bhfeidhm.</p>\n<p>Mar shampla, stóráilfidh an cód seo a leanas comhaid uaslódáilte faoi <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>/meáin/grianghraif <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>is cuma cad é do shuíomh: MEDIA_ROOT:</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.core.files.storage</span> <span class=\"kn\">import</span> FileSystemStorage\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\nfs <span class=\"o\">=</span> FileSystemStorage<span class=\"p\">(</span>location<span class=\"o\">=</span><span class=\"s2\">&quot;/media/photos&quot;</span><span class=\"p\">)</span>\n\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    <span class=\"o\">...</span>\n    photo <span class=\"o\">=</span> models<span class=\"o\">.</span>ImageField<span class=\"p\">(</span>storage<span class=\"o\">=</span>fs<span class=\"p\">)</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"/ga/6.1/howto/custom-file-storage/\"><span class=\"doc\">Custom storage systems</span></a> work the same way:\nyou can pass them in as the <code class=\"docutils literal notranslate\">storage</code> argument to a\n<a class=\"reference internal\" href=\"/ga/6.1/ref/models/fields/#django.db.models.FileField\" title=\"django.db.models.FileField\"><code class=\"xref py py-class docutils literal notranslate\">FileField</code></a>.</p>\n</section>\n<section id=\"using-a-callable\">\n<h3>Ag baint úsáide as inghlaoch<a class=\"heading-anchor\" href=\"#using-a-callable\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Is féidir leat glaoch a úsáid mar an paraiméadar: attr: ~django.db.models.filefield.storage le haghaidh: class: ~django.db.models.filefield nó:class: ~django.db.models.imagefield. Ligeann sé seo duit an stóráil a úsáidtear a mhodhnú ag rith, ag roghnú stórásanna éagsúla do thimpeallachtaí éagsúla, mar shampla.</p>\n<p>Your callable will be evaluated when your model classes are loaded, and must\nreturn an instance of <a class=\"reference internal\" href=\"/ga/6.1/ref/files/storage/#django.core.files.storage.Storage\" title=\"django.core.files.storage.Storage\"><code class=\"xref py py-class docutils literal notranslate\">Storage</code></a>.</p>\n<p>Mar shampla:</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.conf</span> <span class=\"kn\">import</span> settings\n<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\">.storages</span> <span class=\"kn\">import</span> MyLocalStorage<span class=\"p\">,</span> MyRemoteStorage\n\n\n<span class=\"k\">def</span> <span class=\"nf\">select_storage</span><span class=\"p\">():</span>\n    <span class=\"k\">return</span> MyLocalStorage<span class=\"p\">()</span> <span class=\"k\">if</span> settings<span class=\"o\">.</span>DEBUG <span class=\"k\">else</span> MyRemoteStorage<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    my_file <span class=\"o\">=</span> models<span class=\"o\">.</span>FileField<span class=\"p\">(</span>storage<span class=\"o\">=</span>select_storage<span class=\"p\">)</span>\n</code></pre></div>\n<p>D'fhonn stóráil a shainmhínítear sa socrú: socrú: STORAGES is féidir leat úsáid:data: ~django.core.files.storage.storages:</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.core.files.storage</span> <span class=\"kn\">import</span> storages\n\n\n<span class=\"k\">def</span> <span class=\"nf\">select_storage</span><span class=\"p\">():</span>\n    <span class=\"k\">return</span> storages<span class=\"p\">[</span><span class=\"s2\">&quot;mystorage&quot;</span><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    upload <span class=\"o\">=</span> models<span class=\"o\">.</span>FileField<span class=\"p\">(</span>storage<span class=\"o\">=</span>select_storage<span class=\"p\">)</span>\n</code></pre></div>\n<p>Because the callable is evaluated when your model classes are loaded, if you\nneed to override the <a class=\"reference internal\" href=\"/ga/6.1/ref/settings/#std-setting-STORAGES\"><code class=\"xref std std-setting docutils literal notranslate\">STORAGES</code></a> setting in tests, you should use a\n<code class=\"docutils literal notranslate\">LazyObject</code> subclass instead:</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.core.files.storage</span> <span class=\"kn\">import</span> storages\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.functional</span> <span class=\"kn\">import</span> LazyObject\n\n\n<span class=\"k\">class</span> <span class=\"nc\">OtherStorage</span><span class=\"p\">(</span>LazyObject<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_setup</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>_wrapped <span class=\"o\">=</span> storages<span class=\"p\">[</span><span class=\"s2\">&quot;mystorage&quot;</span><span class=\"p\">]</span>\n\n\nmy_storage <span class=\"o\">=</span> OtherStorage<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    upload <span class=\"o\">=</span> models<span class=\"o\">.</span>FileField<span class=\"p\">(</span>storage<span class=\"o\">=</span>my_storage<span class=\"p\">)</span>\n</code></pre></div>\n<p>The <code class=\"docutils literal notranslate\">LazyObject</code> delays the evaluation of the storage until it's actually\nneeded, allowing <a class=\"reference internal\" href=\"/ga/6.1/topics/testing/tools/#django.test.override_settings\" title=\"django.test.override_settings\"><code class=\"xref py py-func docutils literal notranslate\">override_settings()</code></a> to take effect:</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=\"nd\">@override_settings</span><span class=\"p\">(</span>\n    STORAGES<span class=\"o\">=</span><span class=\"p\">{</span>\n        <span class=\"s2\">&quot;mystorage&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;BACKEND&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.core.files.storage.InMemoryStorage&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">test_storage</span><span class=\"p\">():</span>\n    model <span class=\"o\">=</span> MyModel<span class=\"p\">()</span>\n    <span class=\"k\">assert</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span>model<span class=\"o\">.</span>upload<span class=\"o\">.</span>storage<span class=\"p\">,</span> InMemoryStorage<span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>","rootId":"managing-files","toc":[{"title":"Comhaid a úsáid i samhlacha","anchor":"using-files-in-models","children":[]},{"title":"An réad ``Comhad ``","anchor":"the-file-object","children":[]},{"title":"Stóráil comhad","anchor":"file-storage","children":[{"title":"Rudaí stórála","anchor":"storage-objects","children":[]},{"title":"An rang stórála córas comhaid ionsuite","anchor":"the-built-in-filesystem-storage-class","children":[]},{"title":"Ag baint úsáide as inghlaoch","anchor":"using-a-callable","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Using Django","url":"/ga/6.1/topics/"}],"prev":{"docname":"topics/migrations","title":"Imirce","url":"/ga/6.1/topics/migrations/"},"next":{"docname":"topics/testing/index","title":"Testing in Django","url":"/ga/6.1/topics/testing/"},"formats":{"html":"/ga/6.1/topics/files/","markdown":"/ga/6.1/topics/files.md","json":"/ga/6.1/topics/files.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/topics/files.txt","official":"https://docs.djangoproject.com/ga/6.1/topics/files/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}