公共用户配置文件的Django信誉/类系统-错误404



我从Django开始。我试着使用一个类似的系统来公开我的用户档案。但我不明白为什么我会出现错误404。你认为用户可以使用OneToOneField的PK吗?

用户/型号.py

class UserProfile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
reputation = models.ManyToManyField(User, related_name='user_reputation')
...

user/views.py

# public profile reputation
@login_required(login_url='/earlycooker/login')
def ReputationView(request, pk):
userprofile = get_object_or_404(UserProfile, id=pk)
if request.method == "POST": 
userprofile.reputation.add(request.user)
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))      

@property
def total_reputation(self):
return self.reputation.count() 

user/uls.py

path('reputation/<int:pk>/', ReputationView, name="reputation_public"),

user/templates/user_public_profile.html

<form action="{% url 'user:reputation_public' user.pk %}" method="POST">{% csrf_token %}
<button type="submit" name="user_id" value="{{ user.id }}" style=""><img src="/static/img/like.png" width="20px" height="20px" class="" style="border-radius: 90px;background: #ffffff36;" title=""> {{current_user.userprofile.total_reputation}} cherries</button>
</form> 

非常感谢你的帮助,

您应该使用user_id进行筛选,因为User对象和UserProfile对象(本身(不共享相同的id:

@login_required(login_url='/earlycooker/login')
def ReputationView(request, pk):
userprofile = get_object_or_404(UserProfile, user_id=pk)
if request.method == "POST": 
userprofile.reputation.add(request.user)
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))      
# …

最新更新