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