Implémentez la fonction de saisie semi-automatique sur l'écran d'administration de Django

Lorsque vous créez un modèle tel que un-à-plusieurs ou plusieurs-à-plusieurs sur l'écran d'administration de Django, il s'affiche par défaut au format déroulant. Il n'y a pas de problème s'il est petit, mais il est gênant de chercher lorsque le montant augmente ... pulldown.png

Dans de tels cas, il semble que django-autocomplete-light qui peut implémenter la fonction de saisie semi-automatique est souvent installé, mais la documentation officielle de Django Après l'avoir lu attentivement, j'ai trouvé que ʻautocomplete_fields`, qui peut implémenter la saisie semi-automatique, est fourni en tant que fonction.

Préparez un modèle

Cette fois, j'utilise Django 3.0.7 et Python 3.7.2. Pour une compréhension facile, créez deux applications, «chien» et «race», qui enregistrent le nom et la race du chien, et préparez chaque modèle.

$ python manage.py startapp dog
$ python manage.py startapp breed

dog/models.py


from django.db import models

from breed.models import Breed


class Dog(models.Model):
    name = models.CharField("Name", max_length=255, default="", blank=True)
    breed = models.ForeignKey(Breed, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

breed/models.py


from django.db import models


class Breed(models.Model):
    name = models.CharField("BreedName", max_length=255, default="", blank=True)

    def __str__(self):
        return self.name

Maintenant, lorsque j'enregistre certaines races et que j'essaye d'enregistrer un chien, j'obtiens beaucoup de pulldowns comme la première image.

Mettre en œuvre la saisie semi-automatique

Modifiez chaque admin.py pour mettre en œuvre la saisie semi-automatique.

breed/admin.py


from django.contrib import admin

from .models import Breed


@admin.register(Breed)
class BreedAdmin(admin.ModelAdmin):
    search_fields = ('name',)

Entrez le nom du champ que vous souhaitez rechercher dans search_fiedls. Puisqu'il n'y en a qu'un cette fois, j'ai entré le nom.

dog/admin.py


from django.contrib import admin

from .models import Dog


@admin.register(Dog)
class DogAdmin(admin.ModelAdmin):
    autocomplete_fields = ('breed',)

Pour dog, spécifiez les champs dans lesquels vous souhaitez implémenter la saisie semi-automatique avec ʻautocomplete_fields`. Seulement ça! Incroyablement facile.

Lorsque je vérifie l'écran de gestion autocomplete.png Un champ de saisie a été préparé pour que vous puissiez filtrer correctement.

Au fait, j'ai spécifié ForeignKey cette fois, mais il n'y a pas de problème avec ManyToManyField.

dog/models.py


from django.db import models

from breed.models import Breed


class Dog(models.Model):
    name = models.CharField("Name", max_length=255, default="", blank=True)
    breed = models.ManyToManyField(Breed)

    def __str__(self):
        return self.name

autocomplete2.png

Informations de référence

Documentation Django --ModelAdmin.autocomplete_fields

Recommended Posts

Implémentez la fonction de saisie semi-automatique sur l'écran d'administration de Django
Personnalisez la page modèle de l'écran d'administration de Django
L'histoire de l'échec de la mise à jour de "calendar.day_abbr" sur l'écran d'administration de django
Comment enregistrer une seule donnée sur l'écran de gestion de Django
Lier l'élément list_display dans l'Admin Model de Django
Comment filtrer les clés externes qui peuvent être sélectionnées sur l'écran d'administration de Django
Mettre en œuvre REPL