NoReverseMatch at /projects/ Reverse for 'user-profile' with arguments '('',)' not found
Я только начинаю работать с Django и не знаю точно, откуда берется эта ошибка. Возможно, она связана с атрибутом owner. Вот мой код на данный момент.
projects/modely.py
class Project(models.Model):
owner = models.ForeignKey(Profile, null=True, blank=True, on_delete=models.SET_NULL)
title = models.CharField(max_length=200)
users/models.py
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True)
name = models.CharField(max_length=200, blank=True, null=True)
projects/views.py
def projects(request):
projects = Project.objects.all()
context = {'projects':projects}
return render(request, 'projects/projects.html', context)
projects.html
{% for project in projects %}
<p><a class="project__author" href="{% url 'user-profile' project.owner.name %}">{{project.owner.name}}</a></p>
{% endfor %}
users/views.py
def userProfile(request, pk):
profile = Profile.objects.get(id=pk)
context = {'profile':profile}
return render(request, 'users/user-profile.html', context)
Для лучшего ответа мне нужно посмотреть ваш urls.py, но проблема в том, что вы позволяете полю name быть пустым и null, таким образом, когда вы запрашиваете его в url вашего <a href>, он отправляет пустую строку, а ваше представление userProfile запрашивает pk.
Попробуйте это:
<a class="project__author" href="{% url 'user-profile' project.owner %}">
Объект User, уже имеет поля для основной информации, такой как username, password, email и first и last имя.
Вы создаете новое поле под названием name для поиска URL, но задали имя поля blank=True. Вы не можете искать профиль без slug (в вашем случае имя профиля). Поэтому вместо этого вы должны искать пользователя по имени пользователя. Всегда старайтесь придерживаться DRY-подхода (не изобретайте колесо).
Попробуйте сделать следующее:
<a class="project__author" href="{% url 'user-profile' project.owner.user.username %}">
если у вас есть app_name в ваших урлах, то вам нужно использовать имя приложения.
<a class="project__author" href="{% url '<app_name>:user-profile' project.owner.user.username %}">