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 %}">
Вернуться на верх