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 ...
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.
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.
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 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
Documentation Django --ModelAdmin.autocomplete_fields
Recommended Posts