Cvičení – implementace obecných zobrazení pro úpravy dat

Dokončeno

Abychom uživatelům umožnili registraci nových psů v útulku, použijeme CreateView.

Aktualizace modelu tak, aby podporovala get_absolute_url

Začněme aktualizací modelu tak, aby podporoval get_absolute_url.

  1. V editoru Visual Studio Code otevřete soubor dog_shelters/models.py.

  2. Pod řádek, který načte, přidejte následující kód, který funkci reverse naimportuje# TODO: Import reverse.

    # TODO: Import reverse
    from django.urls import reverse
    
  3. Přidejte následující kód do Dog třídy okamžitě řádek, který čte # TODO: Add get_absolute_url , aby přečetl cestu dog_detail z URLconf a předal ID jako parametr.

        # TODO: Add get_absolute_url
        def get_absolute_url(self):
            return reverse('dog_detail', kwargs={"pk": self.pk})
    

Důležité

Mějte na paměti, že Python spravuje skříně s kartami místo složených závorek ({ }). Z tohoto důvodu get_absolute_url musí být na stejné úrovni tabulátoru #TODO jako komentář. Můžete se podívat na soubory v adresáři řešení a zobrazit dokončený projekt.

Vytvoření Objektu DogCreateView

Pojďme vytvořit DogCreateView , abychom někomu umožnili zaregistrovat psa.

  1. V editoru Visual Studio Code otevřete dog_shelters/views.py.

  2. Na konec views.py přidejte následující kód, který chcete vytvořit DogCreateView.

    class DogCreateView(generic.CreateView):
        model = models.Dog
        template_name = 'dog_form.html'
        fields = ['shelter', 'name', 'description']
    

Model jsme nastavili tak, aby Dogbyla šablona dog_form.html a seznam polí, která chceme upravit.

Poznámka:

Pořadí, ve kterém zobrazíte seznam polí, bude pořadí, ve kterém se budou zobrazovat ve formuláři.

Registrace trasy

S naším zobrazením, které jsme vytvořili, zaregistrujeme trasu v našem URLconf.

  1. V editoru Visual Studio Code otevřete dog_shelters/urls.py.

  2. Pod řádek, který přečte # TODO: Register create view, přidejte následující kód pro registraci trasy.

    # TODO: Register create view
    path('dog/register', views.DogCreateView.as_view(), name='dog_register'),
    

Vytvoření šablony HTML

Pojďme vytvořit šablonu pro hostování našeho formuláře.

  1. Uvnitř editoru Visual Studio Code vytvořte nový soubor uvnitř dog_shelters/templates s názvem dog_form.html.

  2. Do souboru dog_form.html přidejte následující kód, který vytvoří šablonu pro hostování našeho formuláře.

    {% extends 'base.html' %}
    
    {# TODO: Register crispy_forms_tags #}
    
    {% block title %}
    Register dog at shelter
    {% endblock %}
    
    {% block content %}
    <h2>Register dog at shelter</h2>
    <form method="POST">
        {% csrf_token %}
    
        {{ form.as_p }}
    
        <button type="submit" class="btn btn-primary">Save</button>
    </form>
    {% endblock %}
    

Poznámka:

Přidáváme poznámku pro sebe, abychom přidali knihovnu, kterou provedeme v dalším cvičení.

Pojďme vytvořit odkaz na naší stránce se seznamem přístřešků, která je aktuálně domovskou stránkou naší aplikace, na stránku registru, kterou jsme vytvořili.

  1. V editoru Visual Studio Code otevřete dog_shelters /templates/shelter_list.html.

  2. Pod řádek, který přečte {# TODO: Add link to registration page #}, přidejte následující kód pro vytvoření odkazu.

    {# TODO: Add link to registration page #}
    <div>
        <a href="{% url 'dog_register' %}">Register a dog available for adoption</a>
    </div>
    

Testování stránky

Podívejme se na naši stránku v akci.

  1. Uložte všechny soubory výběrem možnosti Uložit>vše.

  2. V prohlížeči přejděte na http://localhost:8000.

  3. Vyberte Zaregistrovat psa, který je k dispozici pro přijetí.

    Teď by se měl zobrazit formulář.

    Screenshot of the register dog page, with the drop-down list for Shelter highlighted.

    Všimněte si, jak se vztah cizího klíče stane rozevíracím seznamem.

  4. Zvolte útulek a přidejte jméno a popis psa.

  5. Zvolte Uložit.

    Teď jste přesměrováni na stránku podrobností vašeho psa!

Vytvořili jste formulář pro vytvoření pomocí CreateView Django.