Afficher le nom d'utilisateur en référence à l'ID utilisateur dans le modèle de django

StackOverflow https://stackoverflow.com/questions/2567801

  •  24-09-2019
  •  | 
  •  

Question

Je pense que c'est une question facile. Pour une raison quelconque, je n'ai pas encore une solution.

J'ai un ensemble d'objets de réversion django: version_list. Chaque objet dans l'ensemble a un ID utilisateur attaché. Comment puis-je récupérer les noms d'utilisateur qui correspondent à l'ID utilisateur de?

Pour essayer d'être plus clair, si chaque objet version_list a un nom, la date et l'ID utilisateur, comment puis-je rejoindre le version_list ensemble avec la table d'utilisateur pour savoir ce que id utilisateur va avec quel nom? Cela se fait dans la vue, ou le modèle?

Était-ce utile?

La solution

Je pense que vous êtes à la recherche d'une simple balise template.

from django import template
from django.contrib.auth.models import User

register = template.Library()

@register.simple_tag
def get_username_from_userid(user_id):
    try:
        return User.objects.get(id=user_id).username
    except User.DoesNotExist:
        return 'Unknown'

Ce qui vous utiliseriez comme:

{% for version in version_list %}
  {% get_username_from_userid version.user_id %}
{% endfor %}

Autres conseils

moins que ce soit pour une sorte de compatibilité héritée, vous devez vraiment changer votre schéma d'utiliser un ForeignKey(User). Les données doivent être les mêmes pour cette colonne, donc si vous avez déjà beaucoup de choses que vous ne voulez pas perdre dans votre base de données simplement mettre à jour le champ modèle à

user = models.ForeignKey(User)

et vous aurez même pas de modifier la table si le champ est déjà appelé user_id.

pour obtenir le nom de l'utilisateur, c'est toujours fait au niveau du modèle, mais cela dépend si vous voulez un nom complet (Casey Stark) ou un nom d'utilisateur (caseywstark).

Utilisez {{ user }} pour afficher le nom d'utilisateur et {{ user.get_full_name }} pour afficher un nom complet. La deuxième méthode appelle la fonction get_full_name de l'objet utilisateur dans votre modèle. Il suffit de garder à l'esprit que vous devez définir Utilisateur.prenom et user.last_name pour que cela de ne pas retourner une chaîne vide.

{% for version in version_list %}
    {{ version.user }} wrote version {{ version }}
{% endfor %}

Est-ce que l'objet version dispose d'une propriété utilisateur (à savoir ForeignKey) ou est-ce juste un champ entier? Si elle est une clé étrangère utilisateur, vous devriez être en mesure de dire:

{% for v in version_list %}
{{ v.user.get_full_name }}
{% endfor %}

Sinon, vous allez avoir besoin d'ajouter une fonction / propriété à vos objets de version qui recherche l'utilisateur en rapport avec, comme

from django.contrib.auth.models import User

def related_user(self):
    try:
        return User.objects.get(pk=self.user_id)
    except User.DoesNotExist:
        return None

Et puis dans votre modèle:

{% for v in version_list %}
{{ v.related_user.get_full_name }}
{% endfor %}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top