header Django 中的奇怪用户配置文件数据

Strange user profile data in header Django

我想做的是在 header 中,当我在菜单中输入不属于我自己的配置文件时,该用户的数据会显示在 header.但是当我进入时间线时,我的数据就出来了。这是我的代码。

models.py (Perfil)

class Perfil(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    avatar = models.ImageField(upload_to='avatar', default='avatar/default.png')
    cabecera = models.ImageField(upload_to='cabecera', default='cabecera/default.png')
    biografia = models.TextField(max_length=140, blank=True)
    web = models.URLField(max_length=200, blank=True)
    ubicacion = models.CharField(max_length=30, blank=True)
    fecha_nacimiento = models.DateField(null=True, blank=True)
    creado = models.DateTimeField(auto_now_add=True)
    actualizado = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.user.username

class Conexion(models.Model):
    seguidor = models.ForeignKey(User, related_name='seguidor')
    siguiendo = models.ForeignKey(User, related_name='siguiendo')
    fecha_seguimiento = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return "{} : {}".format(self.seguidor.username,self.siguiendo.username)

views.py (Perfil):

class PerfilDetailView(generic.DetailView):
    model = User
    slug_field = 'username'
    template_name = 'perfil/perfil.html'

    def get_context_data(self, **kwargs):
        context = super(PerfilDetailView, self).get_context_data(**kwargs)
        context['perfil'] = Perfil.objects.filter(user=self.get_object())
        context['posts'] = Post.objects.filter(user=self.get_object())
        context['siguiendo'] = Conexion.objects.filter(seguidor=self.get_object())
        context['seguidores'] = Conexion.objects.filter(siguiendo=self.get_object())
        return context

header.html(片段):

{% if user.is_authenticated %}
<ul class="nav navbar-nav">
    <li {% url 'timeline_global' as home_url %}{% if request.get_full_path == home_url %}class="active"{% endif %}><a href="{% url 'timeline_global' %}"><span class="glyphicon glyphicon-home" aria-hidden="true"></span> Inicio</a></li> 
    <li><a href="#">Grupos</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
    <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{ user.get_full_name }} <span class="caret"></span></a>
        <ul class="dropdown-menu">
            <li><a href="{% url 'perfil' user.username %}">Perfil</a></li>
            <li><a href="#">Opciones</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="{% url 'desconectarse' %}">Desconectarse</a></li>
        </ul>
    </li>
    <li><button type="button" class="btn btn-success navbar-btn" data-toggle="modal" data-target="#postNuevo"><span class="glyphicon glyphicon-edit" aria-hidden="true"></span></button></li>
</ul>
{% else %}
<ul class="nav navbar-nav navbar-right navbar-botones">
    <li>
        <form action="{% url 'login' %}">
            <input type="submit" value="Iniciar Sesion" class="btn btn-primary navbar-btn navbar-boton"/>
        </form>
    </li>
    <li>
        <form action="/crearcuenta">
            <input type="submit" value="Regístrate" class="btn btn-success navbar-btn navbar-boton"/>
        </form>
    </li>
</ul>
{% endif %}

这是解决方案,我与用户模型有冲突。我使用 context_object_name = 'usr' 并在我的用户配置文件模板中将所有名为 user 的标签更改为 usr.

views.py

class UserProfileDetailView(generic.DetailView):
    model = User
    slug_field = 'username'
    template_name = 'perfil/perfil.html'
    context_object_name = 'usr'

    def get_context_data(self, **kwargs):
        context = super(UserProfileDetailView, self).get_context_data(**kwargs)
        context['posts'] = Post.objects.filter(user=self.get_object())
        context['follower'] = Connection.objects.filter(follower=self.get_object())
        context['following'] = Connection.objects.filter(following=self.get_object())
        return context

模板用户配置文件:

{{ usr.userprofile.bio }}

模板Header:

{{ user.get_full_name }}