Non, il n'y a aucun moyen de le faire plus efficacement; Vous pouvez effectuer une recherche en utilisant la base de données, auquel cas vous devez rechercher les champs dans le modèle, ou vous pouvez rechercher les lignes retournées en utilisant Python, comme vous le faites.
(Une façon de contourner ce que certaines personnes utilisent est/dénormalisation/-. Sauver essentiellement la chaîne avec le modèle lui-même dans la base de données, puis l'utiliser comme un indice)
Cependant, votre chaîne presque certainement a certains par rapport aux champs qui sont dans le modèle - idéalement, il est entièrement déterminé par eux. Si cela est vrai, vous pouvez alors analyser la chaîne que vous obtenez pour déterminer ce que les champs doivent être, puis effectuer une recherche dans la base de données en fonction de ces valeurs.
code Exemple:
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=200)
def __str__(self):
return self.title + ": " + self.author
def parse_book(book_name):
title, author = book_name.split(": ", 1)
try:
return Book.objects.get(title=title, author=author)
except Book.DoesNotExist:
return None
que diriez-vous 'Book.objects.get (name = book_name)' 'ou Book.objects.filter (livre = book_name)'? –
C'était un exemple inventé. Il est difficile de chercher sur le modèle réel sans faire quelques autres recherches de modèles et de les utiliser comme des clés – joeButler
Fournissez un exemple concret alors. –