8
votes

Django - Modèle d'affichage du modèle Verbose_Names et objets

J'ai besoin d'afficher plusieurs modèles Nom et objets dans un modèle

Voici mon Vue Strong> P>

{% 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 %}


0 commentaires

4 Réponses :


16
votes

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: xxx

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: xxx


6 commentaires

Travail. J'ai utilisé {% get_verbose_name objs.0%} 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}} ou {{obj.0 | verbose_name}}


+1 @mandx, je pense que vous avez raison à ce sujet à la recherche de plus propre. Bon appel.


Un problème est que objs.0 peut être indéfini s'il n'y a pas de objs :(


Je pense qu'il est mieux utilise retour requisset.model._meta.verbose_name à 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' erreur. Django 1.7.



1
votes

tag: xxx

html (année est le nom de mon champ dans mon modèle) xxx

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.


0 commentaires

0
votes

Une solution alternative consiste à sous-classer votre modèle QuerySet code> : xxx pré>

maintenant, vous pouvez obtenir le verbose_name code> dans le querySet directement, sans le Besoin de itérer sur elle: p> xxx pré>

si vous souhaitez accéder au 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


0 commentaires

0
votes

dans Django 3.x, j'ai trouvé cette méthode la plus simple. Je mettez habituellement tout mon objet utils dans un module: xxx

puis dans le modèle: xxx


0 commentaires