1

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

Répondre

2

Il y a beaucoup de dossiers dans le profil maintenant, vous avez coz get.objects.all(). alors utilisez-le de cette façon.

profiles = Profile.get.objects.all() 

# for first profile's country 
country1 = profiles.0.country 

#for second profile entry 
country2 = profiles.1.country 

Alternatively in html

{% for profile in profiles %} 
    {{profile.country}} 
    {{profile.timezone}} 
{% endfor %} 

for a specific user, get the id of that user and then get their profile

id = request.user.pk 
profile = get_object_or_404(Profile, user__id=id) 

maintenant en html,

{{profile.country}} 
{{profile.timezone}} 
+0

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

+0

Voir J'ai mis à jour ma réponse. Jetez un coup d'oeil et dites-moi si cela fonctionne pour vous ou non. –

+0

Cela a fonctionné. Merci beaucoup! – user3088202