Ag scríobh do chéad aip Django, cuid 7Link to this heading

Tosaíonn an rang teagaisc seo nuair a d'fhág Tutorial 6 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.

Saincheap an fhoirm riaracháinLink to this heading

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ú

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 teideal an réimse réimse. Seo an chuma atá ar ár bhfoirm anois:

Tá réimsí réimsí anois ag an bhfoirm

Saincheap an liosta athraithe adminLink to this heading

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í

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, 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:

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

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() ar an modh sin (ag síneadh leis an gcomhad :comhad:`polls/models.py` 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.

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. Cuir an líne seo a leanas le QuestionAdmin:

Code
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

Braitheann an cineál scagaire a thaispeánfar ar an gcineál réimse a bhfuil tú ag scagadh air. Toisc gur 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:

Code
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.

Is dea-am é anois freisin le tabhairt faoi deara go dtugann liostaí athraithe leathanach saor in aisce duit. Is é an réamhshocrú ná 100 mír a thaispeáint in aghaidh an leathanaigh. Athraigh leathanach an liosta, boscaí cuardaigh, scagairí, ordlathais dáta, agus column-header-ordering ar fad oibriú le chéile mar a cheapann tú ba chóir dóibh.

Saincheap cuma agus mothú an riaracháinLink to this heading

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éidLink to this heading

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 (:comhad:`mysite/settings.py`, cuimhnigh) agus cuir rogha DIRS leis sa socrú 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 is ea liosta eolairí córais comhaid le seiceáil agus teimpléid Django á lódáil; is cosán cuardaigh é.

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.

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:

Django template
{% 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 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.

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éidLink to this heading

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 le haghaidh tuilleadh eolais faoin gcaoi a n-aimsíonn Django a theimpléid.

Saincheap an leathanach innéacs adminLink to this heading

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 chun foghlaim conas pacáistí tríú páirtí a úsáid.