J'ai besoin d'afficher plusieurs modèles Nom et objets dans un modèle
Voici mon {% for objs in objects %}
<div class="content">
<div class="title">{{ objs._meta.verbose_name }}</div>
<ul>
{% for obj in objs %}
<li>{{ obj }}</li>
{% endfor %}
</ul>
</div>
{% endfor %}
4 Réponses :
Pour y accéder dans votre modèle, vous avez probablement remarqué que Django ne vous permet pas d'utiliser des préfixes de soulignement pour accéder aux attributs des modèles. Ainsi, le moyen le plus simple d'accéder au nom Verbose pour tout objet donné sans avoir à créer une méthode de modèle sur chaque modèle serait de créer une étiquette de modèle: non liée, mais vous avez un Bug dans votre modèle, dans lequel vous essayez d'accéder à l'attribut _méta sur un query au lieu d'un objet. Donc, votre ligne de titre devrait plutôt ressembler à quelque chose comme: p>
Travail. J'ai utilisé {% get_verbose_name objs.0%} code> enfin (pas sûr qu'il fonctionnera s'il n'y a pas de valeur).
Peut-être que l'utilisation d'un filtre est plus propre. C'est presque la même mise en œuvre, mais la méthode d'appel semble mieux. Quelque chose comme {{obj | verbose_name}} code> ou {{obj.0 | verbose_name}} code>
+1 @mandx, je pense que vous avez raison à ce sujet à la recherche de plus propre. Bon appel.
Un problème est que objs.0 code> peut être indéfini s'il n'y a pas de objs code> :(
Je pense qu'il est mieux utilise retour requisset.model._meta.verbose_name code> à partir de la balise, queryset est l'ensemble des résultats (pas la première ligne)
J'obtiens 'str' objet n'a pas d'attribut '_méta' code> erreur. Django 1.7.
tag: html (année est le nom de mon champ dans mon modèle) p> grâce à la référence ci-dessus. Je voulais partager ce que j'ai trouvé dans le cas d'autres où à la recherche de la même solution que j'ai trouvée pour ma situation. p> p>
Une solution alternative consiste à sous-classer votre modèle maintenant, vous pouvez obtenir le si vous souhaitez accéder au QuerySet code> : verbose_name code> dans le querySet directement, sans le Besoin de itérer sur elle: p> verbose_name code> à partir d'une instance de modèle directement, et non à partir d'un QuerySet Vous devrez définir une propriété dans votre modèle également: P> class SomeModel(models.Model):
...
objects = SomeQuerySet.as_manager()
class Meta:
verbose_name = 'Some Model'
@property
def verbose_name(self):
return self._meta.verbose_name
dans Django 3.x, j'ai trouvé cette méthode la plus simple. Je mettez habituellement tout mon objet utils dans un module: puis dans le modèle: p>