J'utilise l'authentification par défaut de Django pour les utilisateurs et j'ai créé un modèle séparé pour étendre un peu le profil utilisateur. Lorsque j'essaie d'accéder aux informations du profil utilisateur, il n'apparaît pas sur la page. À mon avis, je passe les objets Profile au contexte de la vue, mais cela ne fonctionne toujours pas.Django: Impossible d'insérer les données de profil utilisateur du modèle dans le modèle
Lorsque je tente dans la coquille, je reçois AttributeError: objet 'QuerySet' n'a pas d'attribut 'pays' erreur lorsque je fais:
profile = Profile.get.objects.all()
country = profile.coutry
country
Ci-dessous mon models.py:
from pytz import common_timezones
from django.db import models
from django.contrib.auth.models import User
from django_countries.fields import CountryField
from django.db.models.signals import post_save
from django.dispatch import receiver
TIMEZONES = tuple(zip(common_timezones, common_timezones))
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
country = CountryField()
timeZone = models.CharField(max_length=50, choices=TIMEZONES, default='US/Eastern')
def __str__(self):
return "{0} - {1} ({2})".format(self.user.username, self.country, self.timeZone)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
Voici mon views.py
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from user.models import Profile
@login_required()
def home(request):
profile = Profile.objects.all()
return render(request, "user/home.html", {'profile': profile})
Enfin le fichier home.html:
{% extends "base.html" %}
{% block title %}
Account Home for {{ user.username }}
{% endblock title %}
{% block content_auth %}
<h1 class="page-header">Welcome, {{ user.username }}. </h1>
<p>Below are you preferences:</p>
<ul>
<li>{{ profile.country }}</li>
<li>{{ profile.timeZone }}</li>
</ul>
{% endblock content_auth %}
si je ne voulais afficher les données de profil pour un utilisateur spécifique en connecté? est-ce que je dois changer mon modèle/vue? – user3088202
Voir J'ai mis à jour ma réponse. Jetez un coup d'oeil et dites-moi si cela fonctionne pour vous ou non. –
Cela a fonctionné. Merci beaucoup! – user3088202