---
title: "Ag scríobh do chéad aip Django, cuid 7"
version: 6.1
locale: ga
source: https://docs.djangoproject.com/ga/6.1/intro/tutorial07/
canonical: https://djangodocs.dev/ga/6.1/intro/tutorial07/
---
# Ag scríobh do chéad aip Django, cuid 7

Tosaíonn an rang teagaisc seo nuair a d'fhág [Tutorial 6](/ga/6.1/intro/tutorial06/) as. Táimid ag leanúint leis an bhfeidhmchlár vótaíochta gréasáin agus díreoimid ar shuíomh riaracháin Django a ghintear go huathoibríoch a shaincheapadh a rinneamar iniúchadh ar dtús i [Teagasc 2](/ga/6.1/intro/tutorial02/).

> **Cá háit le cabhair a fháil:**
>
> Má tá deacracht agat dul tríd an rang teagaisc seo, téigh ar aghaidh chuig an rannán :d oc:'Getting Help\</faq/help\>' den rannán Ceisteanna Coitianta.

## Saincheap an fhoirm riaracháin

Trí mhúnla `Ceist` a chlárú le `admin.site.register(Question)`, bhí Django in ann léiriú réamhshocraithe foirme a chruthú. Go minic, beidh tú ag iarraidh conas a bhreathnaíonn agus a oibríonn an fhoirm riaracháin a shaincheapadh. Déanfaidh tú é seo trí na roghanna atá uait a insint do Django nuair a chláraíonn tú an réad.

Feicfimid conas a oibríonn sé seo trí na réimsí ar an bhfoirm eagarthóireachta a athordú. Ionadaigh an líne `admin.site.register(Ceist)` le:

*`polls/admin.py`*

```python
from django.contrib import admin

from .models import Question

class QuestionAdmin(admin.ModelAdmin):
    fields = ["pub_date", "question_text"]

admin.site.register(Question, QuestionAdmin)
```

Leanfaidh tú an patrún seo -- cruthaigh rang admin samhail, ansin cuir ar aghaidh é mar an dara argóint chuig `admin.site.register()` -- am ar bith is gá duit na roghanna riaracháin do shamhail a athrú.

Fágann an t-athrú áirithe seo thuas go dtagann an "Publication date" roimh an réimse "Question":

![Réimsí a athordú](intro/_images/admin07.png)

Níl sé seo go hiontach le dhá réimse, ach i gcás foirmeacha riaracháin ina bhfuil mórán réimsí, is sonraí inúsáidteachta tábhachtach é ordú iomasach a roghnú.

Agus foirmeacha ag baint le mórán réimsí, b'fhéidir gur mhaith leat an fhoirm a roinnt ina réimsí páirce:

*`polls/admin.py`*

```python
from django.contrib import admin

from .models import Question

class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None, {"fields": ["question_text"]}),
        ("Date information", {"fields": ["pub_date"]}),
    ]

admin.site.register(Question, QuestionAdmin)
```

Is é an chéad eilimint de gach tuple in [`fieldsets`](/ga/6.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.fieldsets) teideal an réimse réimse. Seo an chuma atá ar ár bhfoirm anois:

![Tá réimsí réimsí anois ag an bhfoirm](intro/_images/admin08t.png)

## Rudaí gaolmhara a chur leis

Ceart go leor, tá ár leathanach riaracháin `Question`, againn, ach tá roghanna iolracha ag `Choice`s, agus ní thaispeánann an leathanach riaracháin roghanna.

Fós féin.

Tá dhá bhealach ann chun an fhadhb seo a réiteach. Is é an chéad cheann ná `Choice` a chlárú leis an riarthóir díreach mar a rinneamar le `Question`:

*`polls/admin.py`*

```python
from django.contrib import admin

from .models import Choice, Question

# ...
admin.site.register(Choice)
```

Anois tá "Choices" ina rogha atá ar fáil sa riarthóir Django. Breathnaíonn an fhoirm ""Add choice" mar seo:

![Rogha leathanach riaracháin](intro/_images/admin09.png)

San fhoirm sin, is bosca roghnaithe é an réimse "Ceist" ina bhfuil gach ceist sa bhunachar sonraí. Tá a fhios ag Django gur cheart [`ForeignKey`](/ga/6.1/ref/models/fields/#django.db.models.ForeignKey) a léiriú sa admin mar bhosca \`\` \<roghnaigh\>\`\`. Inár gcás, níl ach ceist amháin ann ag an bpointe seo.

Also note the "Add another question" button (displayed as a plus sign) to the
right of the "Question" field. Every `ForeignKey` relationship gets this
button for free. When you click this button, you'll get a popup window with the
"Add question" form. If you add a question in that window and click "Save",
Django will save the question to the database and dynamically add it as the
selected choice on the "Add choice" form you're looking at.

Ach, i ndáiríre, is bealach neamhéifeachtúil é seo chun réada `Choice` a chur leis an gcóras. Bheadh ​​sé níos fearr dá bhféadfá braon Roghanna a chur leis go díreach nuair a chruthaíonn tú an réad `Ceist`. Déanaimis é sin a tharlóidh.

Bain an glao `clár()` don tsamhail `Choice`. Ansin, cuir in eagar an cód clárúcháin `Ceist` le léamh:

*`polls/admin.py`*

```python
from django.contrib import admin

from .models import Choice, Question

class ChoiceInline(admin.StackedInline):
    model = Choice
    extra = 3

class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None, {"fields": ["question_text"]}),
        ("Date information", {"fields": ["pub_date"], "classes": ["collapse"]}),
    ]
    inlines = [ChoiceInline]

admin.site.register(Question, QuestionAdmin)
```

Insíonn sé seo do Django: "Cuirtear rudaí `Choice` in eagar ar an leathanach riaracháin `Ceist`. De réir réamhshocraithe, cuir go leor réimsí ar fáil le haghaidh 3 rogha."

Luchtaigh an leathanach "Cuir ceist leis" chun a fheiceáil conas mar atá sé sin:

![Tá roghanna ar an leathanach seo anois](intro/_images/admin10t.png)

Oibríonn sé mar seo: Tá trí shliotán le haghaidh Roghanna gaolmhara -- mar atá sonraithe ag \`\` breise \`\` -- agus gach uair a thagann tú ar ais go dtí an leathanach "Athraigh" le haghaidh réad a cruthaíodh cheana féin, gheobhaidh tú trí shliotán breise eile.

At the end of the three current slots you will find an "Add another Choice"
link. If you click on it, a new slot will be added. If you want to remove the
added slot, you can click on the X to the top right of the added slot. This
image shows an added slot:

![Sliotán breise curtha leis go dinimiciúil](intro/_images/admin14t.png)

Fadhb bheag amháin, áfach. Tógann sé go leor spáis scáileáin chun na réimsí go léir a thaispeáint chun rudaí gaolmhara `Choice` a iontráil. Ar an ábhar sin, cuireann Django bealach táblach chun rudaí inlíne gaolmhara a thaispeáint. Chun é a úsáid, athraigh an dearbhú `ChoiceInline` chun a léamh:

*`polls/admin.py`*

```python
class ChoiceInline(admin.TabularInline): ...
```

Leis an `TabularInline` sin (in ionad \`\` StackedInline\`\`), taispeántar na cuspóirí gaolmhara i bhformáid tábla-bhunaithe níos dlúithe:

![Tá roghanna níos dlúithe le fáil anois ar leathanach na gceisteanna](intro/_images/admin11t.png)

Tabhair faoi deara go bhfuil breise "Scrios?" colún a cheadaíonn sraitheanna a cuireadh leis a bhaint ag baint úsáide as an gcnaipe "Cuir Rogha eile leis" agus sraitheanna atá sábháilte cheana féin.

## Saincheap an liosta athraithe admin

Anois go bhfuil cuma mhaith ar leathanach riaracháin na gCeisteanna, déanaimis roinnt tweaks ar an leathanach "liosta athraithe" - an ceann a thaispeánann na ceisteanna go léir sa chóras.

Seo an chuma atá air ag an bpointe seo:

![Athraítear leathanach liosta na vótaíochtaí](intro/_images/admin04t.png)

De réir réamhshocraithe, taispeánann Django an \`\` str ()\`\` de gach réad. Ach uaireanta bheadh ​​sé níos cabhrach dá bhféadfaimis réimsí aonair a thaispeáint. Chun é sin a dhéanamh, bain úsáid as an rogha admin [`list_display`](/ga/6.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display), arb é liosta ainmneacha páirce é le taispeáint, mar cholúin, ar an leathanach liosta athruithe don réad:

*`polls/admin.py`*

```python
class QuestionAdmin(admin.ModelAdmin):
    # ...
    list_display = ["question_text", "pub_date"]
```

Ar mhaithe le beart maith, cuirimis san áireamh freisin an modh `foilsíodh_le déanaí()` ó [Teagasc 2](/ga/6.1/intro/tutorial02/):

*`polls/admin.py`*

```python
class QuestionAdmin(admin.ModelAdmin):
    # ...
    list_display = ["question_text", "pub_date", "was_published_recently"]
```

Anois tá cuma mar seo ar an leathanach liosta athraithe ceisteanna:

![Leathanach liosta athruithe pobalbhreithe, nuashonraithe](intro/_images/admin12t.png)

Is féidir leat cliceáil ar na ceanntásca colúin chun iad a shórtáil de réir na luachanna sin -- ach amháin i gcás an chinnteidil `foilsíodh_le déanaí_`, mar ní thacaítear le sórtáil de réir aschur modha treallach. Tabhair faoi deara freisin gurb é ceanntásc an cholúin le haghaidh `foilsíodh_le déanaí`, de réir réamhshocraithe, ainm an mhodha (agus spásanna curtha in ionad na bhfostóirí), agus go bhfuil léiriú teaghrán an aschuir i ngach líne.

Is féidir leat é sin a fheabhsú trí úsáid a bhaint as an maisitheoir [`display()`](/ga/6.1/ref/contrib/admin/#django.contrib.admin.display) ar an modh sin (ag síneadh leis an gcomhad  a cruthaíodh i Teagasc 2), mar a leanas:

*`polls/models.py`*

```python
from django.contrib import admin

class Question(models.Model):
    # ...
    @admin.display(
        boolean=True,
        ordering="pub_date",
        description="Published recently?",
    )
    def was_published_recently(self):
        now = timezone.now()
        return now - datetime.timedelta(days=1) <= self.pub_date <= now
```

Le haghaidh tuilleadh eolais ar na hairíonna is féidir a chumrú tríd an maisitheoir, féach [`list_display`](/ga/6.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display).

Cuir do chomhad ::polls/admin.py in eagar arís agus cuir feabhas ar an leathanach liosta athruithe `Ceist`: scagairí ag baint úsáide as an [`list_filter`](/ga/6.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter). Cuir an líne seo a leanas le `QuestionAdmin`:

```
list_filter = ["pub_date"]
```

Cuireann sé sin barra taoibh "Filter" leis a ligeann do dhaoine an liosta athruithe a scagadh de réir an réimse \`\` pub\_date\`\`:

![Leathanach liosta athruithe pobalbhreithe, nuashonraithe](intro/_images/admin13t.png)

Braitheann an cineál scagaire a thaispeánfar ar an gcineál réimse a bhfuil tú ag scagadh air. Toisc gur [`DateTimeField`](/ga/6.1/ref/models/fields/#django.db.models.DateTimeField) é \`\` pub\_date\`\`, tá a fhios ag Django roghanna cuí scagaire a thabhairt: "Dáta ar bith", "Inniu", "7 lá anuas", "An mhí seo", "I mbliana".

Tá sé seo ag múnlú suas go maith. Cuirimis roinnt cumas cuardaigh leis:

```
search_fields = ["question_text"]
```

Cuireann sé sin bosca cuardaigh ag barr an liosta athruithe. Nuair a chuireann duine téarmaí cuardaigh isteach, déanfaidh Django an réimse `question_text` a chuardach. Is féidir leat an oiread réimsí agus is mian leat a úsáid -- ach toisc go n-úsáideann sé fiosrú LIKE\` taobh thiar de na pictiúir, má chuirtear teorainn le líon na réimsí cuardaigh go líon réasúnta, beidh sé níos éasca do do bhunachar sonraí an cuardach a dhéanamh.

Now's also a good time to note that change lists give you free pagination. The
default is to display 100 items per page.

> **See also**
>
> The following [`ModelAdmin`](/ga/6.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin) options allow
> further customization of change lists:
> [`list_per_page`](/ga/6.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_per_page),
> [`search_fields`](/ga/6.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.search_fields),
> [`date_hierarchy`](/ga/6.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.date_hierarchy), and
> [`list_display`](/ga/6.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display).

## Saincheap cuma agus mothú an riaracháin

Is léir gur rud ridiciúil é “riarachán Django” ag barr gach leathanach riaracháin. Níl ann ach téacs áitsealbhóra.

Is féidir leat é a athrú, áfach, ag baint úsáide as córas teimpléad Django. Tá an riarthóir Django faoi thiomáint ag Django féin, agus úsáideann a chomhéadain córas teimpléid Django féin.

### Saincheapadh do \* tionscadail \* teimpléid

Cruthaigh eolaire `templates` i do eolaire `djangotutorial`. Is féidir le teimpléid maireachtáil áit ar bith ar do chóras comhad ar féidir le Django rochtain a fháil air. (Ritheann Django mar cibé úsáideoir a ritheann do fhreastalaí.) Mar sin féin, is dea-ghnás é do theimpléid a choinneáil laistigh den tionscadal.

Oscail do chomhad socruithe (, cuimhnigh) agus cuir rogha [`DIRS`](/ga/6.1/ref/settings/#std-setting-TEMPLATES-DIRS) leis sa socrú [`TEMPLATES`](/ga/6.1/ref/settings/#std-setting-TEMPLATES):

*`mysite/settings.py`*

```python
TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [BASE_DIR / "templates"],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]
```

[`DIRS`](/ga/6.1/ref/settings/#std-setting-TEMPLATES-DIRS) is ea liosta eolairí córais comhaid le seiceáil agus teimpléid Django á lódáil; is cosán cuardaigh é.

> **Eagrú teimpléid**
>
> Díreach cosúil leis na comhaid statacha, \* d'fhéadfadh \* ár teimpléid go léir a bheith againn le chéile, in aon eolaire teimpléid mór, agus d'oibreodh sé go foirfe. Mar sin féin, ba cheart teimpléid a bhaineann le feidhmchlár ar leith a chur in eolaire teimpléid an fheidhmchláir sin (m.sh. `vótaíocht/teimpléid`) seachas in eolaire an tionscadail (`templates`). Déanfaimid plé níos mine sa [teagasc maidir le haipeanna ath-inúsáidte](/ga/6.1/intro/reusable-apps/) *cén fáth* a ndéanaimid é seo.

Anois cruthaigh eolaire darb ainm \`\` admin\`\` taobh istigh de \`\` teimpléid\`\`, agus cóipeáil an teimpléad \`\` admin/base\_site.html\`\` ón eolaire réamhshocraithe teimpléid admin Django i gcód foinse Django féin (: foinse:\` django/contrib/admin/templates\`) isteach san eolaire sin.

> **Cá bhfuil na comhaid foinse Django?**
>
> Má tá deacracht agat a fháil amach cá bhfuil na comhaid foinse Django suite ar do chóras, rith an t-ordú seo a leanas:
>
> ```console
> $ python -c "import django; print(django.__path__)"
> ```
>
> *Windows*
>
> ```doscon
> ...\> py -c "import django; print(django.__path__)"
> ```

Ansin, cuir an comhad in eagar agus cuir ainm do shuímh féin in áit `{{ site_header|réamhshocraithe:_('Riarachán Django') }}` (lena n-áirítear na braces curly) mar is cuí leat. Ba chóir go mbeadh roinn de chód mar:

```html+django
{% block branding %}
<div id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></div>
{% if user.is_anonymous %}
  {% include "admin/color_theme_toggle.html" %}
{% endif %}
{% endblock %}
```

Bainimid úsáid as an gcur chuige seo chun tú a mhúineadh conas teimpléid a shárú. I dtionscadal iarbhír, is dócha go n-úsáidfeá an tréith [`django.contrib.admin.AdminSite.site_header`](/ga/6.1/ref/contrib/admin/#django.contrib.admin.AdminSite.site_header) chun an saincheapadh áirithe seo a dhéanamh níos éasca.

Tá go leor téacs sa chomhad teimpléad seo ar nós `{% brandáil bloc %}` agus `{{ title }}`. Is cuid de theanga teimpléid Django iad na clibeanna `{%` agus `{{`. Nuair a dhéanann Django `admin/base_site.html`, déanfar an teanga teimpléid seo a mheas chun an leathanach HTML deiridh a tháirgeadh, díreach mar a chonaic muid i [Teagasc 3](/ga/6.1/intro/tutorial03/).

Tabhair faoi deara gur féidir aon cheann de na teimpléid admin réamhshocraithe Django a shárú. Chun teimpléad a shárú, déan an rud céanna a rinne tú le `base_site.html` -- cóipeáil é ón eolaire réamhshocraithe isteach i do eolaire saincheaptha, agus déan athruithe.

### Saincheapadh d'iarratais \* teimpléid

Fiafróidh léitheoirí géara: Ach má bhí: socrú:DIRS \<TEMPLATES-DIRS\> folamh de réir réamhshocraithe, conas a d'aimsigh Django na teimpléid réamhshocraithe admin? Is é an freagra ná, ós rud é go bhfuil : socrú:APP\_DIRS \<TEMPLATES-APP\_DIRS\> socraithe go `True`, lorgaíonn Django go huathoibríoch fochomhadlann `templates/` laistigh de gach pacáiste feidhmchláir, lena úsáid mar chúltaca (don ' ná déan dearmad gur feidhmchlár é `django.contrib.admin`).

Níl ár bhfeidhmchlár vótaíochta an-chasta agus ní bhíonn teimpléid shaincheaptha riaracháin ag teastáil uaidh. Ach dá bhfásfadh sé níos sofaisticiúla agus go raibh gá le mionathrú a dhéanamh ar theimpléid chaighdeánacha riaracháin Django le haghaidh cuid dá fheidhmiúlacht, bheadh ​​sé níos ciallmhaire teimpléid *an fheidhmchláir* a mhodhnú, seachas iad siúd sa *tionscadal*. Ar an mbealach sin, d'fhéadfá an t-iarratas vótaíochta a áireamh in aon tionscadal nua agus a bheith cinnte go bhfaighidh sé na teimpléid saincheaptha a bhí de dhíth air.

Féach an [doiciméadú luchtaithe teimpléad](/ga/6.1/topics/templates/#template-loading) le haghaidh tuilleadh eolais faoin gcaoi a n-aimsíonn Django a theimpléid.

## Saincheap an leathanach innéacs admin

Ar nóta comhchosúil, b'fhéidir gur mhaith leat cuma agus mothú an leathanaigh innéacs riaracháin Django a shaincheapadh.

De réir réamhshocraithe, taispeánann sé na haipeanna go léir i: socrú:INSTALLED\_APPS atá cláraithe leis an bhfeidhmchlár riaracháin, in ord aibítre. B'fhéidir gur mhaith leat athruithe suntasacha a dhéanamh ar an leagan amach. Tar éis an tsaoil, is dócha gurb é an t-innéacs an leathanach is tábhachtaí den riarthóir, agus ba cheart go mbeadh sé éasca le húsáid.

The template to customize is `admin/index.html`. (Do the same as with
`admin/base_site.html` in the previous section -- copy it from the default
directory to your custom template directory). Edit the file, and you'll see it
uses a template variable called `app_list`. That variable contains every
installed Django app. Instead of using that, you can hardcode links to
object-specific admin pages in whatever way you think is best.

Nuair atá tú ar do chompord leis an riarthóir, léigh [cuid 8 den rang teagaisc seo](/ga/6.1/intro/tutorial08/) chun foghlaim conas pacáistí tríú páirtí a úsáid.
