Django — Не удается получить доступ к профилю пользователя из поискового запроса

#django #authentication

Вопрос:

Я пытаюсь получить доступ к профилю (OneToOne, связанный с пользовательским пользователем), однако у меня это не получается.

Когда я пытаюсь позвонить {{ user_element.profile.university }} , он возвращается None . Но мой звонок request.user.profile.university работает просто отлично.

Удивительно, {{ user_element.first_name }} но снова работает нормально.

Следовательно, проблема должна быть в том, что я не могу получить доступ к профилю. Однако, если я введу профиль неправильно (например, profile2), он вернет «» вместо «Нет».

Что я сделал не так?

models.py:

 class CustomUser(AbstractUser):
    pass

class Profile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="profile")

    highschool_or_university = models.CharField(max_length=6, choices=(("school", "Highschool"), ("uni", "University")),
                                                blank=True, null=True)
    date_of_birth = models.DateField(blank=True, null=True)
    image = models.ImageField(upload_to='users/%Y/%m/%d/', blank=True)
    country = models.ForeignKey(Country, on_delete=models.SET_NULL, null=True)
    university = models.ForeignKey(University, on_delete=models.SET_NULL, null=True)
 

views.py:

 class SearchResultsView(ListView):
    model = CustomUser
    template_name = 'network/search.html'

    def get_queryset(self):
        query = self.request.GET.get('q')
        ret = CustomUser.objects.annotate(full_name=Concat('first_name', V(' '), 'last_name')).filter(
            full_name__icontains=query)
        req_email = self.request.user.email
        ret = ret.exclude(email=req_email)
        return ret
 

urls.py:

 urlpatterns = [
    path('feed', views.home, name="home"),
    path('', views.landing, name="landing"),
    path('about', views.about, name="about"),
    path('search/', login_required(SearchResultsView.as_view()), name='search'),
    path('profile_detail/<int:id>/', views.profile_detail, name='profile_detail'),
]
 

search.html:

 {% extends "base.html" %}
{% load static %}
{% block title %}Search{% endblock %}
{% block content %}
    <div class="w3-card w3-round w3-white" style="margin: 4px">
        <div class="w3-container w3-padding">
            <h4>Search Results</h4>
        </div>

        {% for user_element in object_list %}
            <a href="{% url 'profile_detail' user_element.id %}">
                <ul class="w3-ul w3-hoverable w3-white" style="border: 1px solid grey">
                    <li class="w3-padding-16">
                        {% if user_element.profile.image %}
                            <p class="w3-center"><img src="{{ user_element.profile.image.url }}" class="w3-round-xlarge"
                                                      style="height:106px;width:106px"></p>
                        {% else %}
                            <p class="w3-center"><img src="{% static 'images/avatar.svg' %}" class="w3-round-xlarge"
                                                      style="height:106px;width:106px"></p>
                        {% endif %}
                        <span class="w3-large">{{ user_element.first_name }} {{ user_element.last_name }}</span><br>
                        <span>University: {{ user_element.profile.university }}</span>
                    </li>
                </ul>
            </a>
        {% endfor %}

    </div>
{% endblock %}