Est-il possible de modifier certains éléments spécifiques dans un objet QuerySet? Dans mon cas, j'essaie de trancher des champs "title" avec une longueur de plus de 40 caractères et d'ajouter "..." à la fin du champ.Modification du résultat du QuerySet
Répondre
Il y a 2 façons de faire ce que vous voulez.
La première consiste à utiliser un filtre Django. Donc, si vous parcourez les éléments de votre jeu de requête et que vous les affichez sur une page, utilisez quelque chose comme truncatewords. Vous utilisez cela comme dans votre modèle:
{% for item in queryset %}
<h1>{{ item.title|truncatewords:3 }}</h1>
{% endfor %}
Il ne ressemble pas à il y a un filtre Django pour tronquer la base du nombre de caractères. Si vous voulez write your own filter ce n'est pas si difficile à faire.
L'autre option consiste à mettre une méthode sur votre modèle pour faire ce que vous voulez. Voici un exemple:
@property
def short_title(self):
return '%s...' % self.title[:40]
alors vous être en mesure de faire référence à ce partout dans votre modèle comme {{object.short_title}}.
Merci, ajouté à mon /r/todayilearned – sadegh
Je propose d'ajouter une nouvelle propriété « adjusted_title » à chaque objet
for item in your_query_set:
if(len(item.title) > 40):
item.adjusted_title = item.title[0:40] + "..."
Cela fonctionnerait, mais pourrait signifier une boucle inutile à travers le jeu de requête. Il est probablement préférable de simplement mettre la logique dans une méthode sur le modèle comme je l'ai suggéré pour enregistrer une boucle inutile et dans le cas où la logique est nécessaire ailleurs. – sheats
Êtes-vous essayez d'enregistrer les modifications apportées à la base de données ou tout simplement les afficher sur une page? – sheats