Python社区  »  Django

Django错误:int()参数必须是字符串、类似于对象的字节或数字,而不是“User”

Hamza Lachi • 3 周前 • 250 次点击  

如何修复此错误:

int() argument must be a string, a bytes-like object or a number, not 'User'

我想创建用户配置文件,我累了修复!

我想在他注册时创建用户页,但我一次又一次地收到这个错误

基.Html

  {% if user.is_authenticated %}
  <li class="nav-item">

    <a class="nav-link navaour" href="{% url 'profile' pk=user.pk %}"><i class="fa fa-user"></i>&nbsp; Profile</a>
  </li>
  <li class="nav-item">

    <a class="nav-link navaour" href="{% url 'logout' %}"><i class="fa fa-power-off"></i>&nbsp; Logout</a>
  </li>

  {% else %}
  <li class="nav-item">

    <a class="nav-link navaour" href="{% url 'register' %}"><i class="fa fa-check-square-o"></i>&nbsp; Sign up Free</a>
  </li>    
  <li class="nav-item">

    <a class="nav-link navaour" href="{% url 'login' %}"><i class="fa fa-user"></i>&nbsp; Login</a>
  </li>
  {% endif %}  

网址.py

from . import views
from django.urls import path

urlpatterns = [
    path('', views.index,name='index'),
    path('accounts/signup/', views.user_reg,name='register'),
    path('profile/<int:pk>',views.profile_detail,name='profile')

]

视图.py

def profile_detail(request,pk):
    pk = User.objects.get(pk=pk)
    model = get_object_or_404(User, pk=pk)
    template_name = 'profile_detail_view.html'

这是我的 模型.py

from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse

# Create your models here.
class user_register_model(models.Model):
    user = models.OneToOneField(User,on_delete=models.CASCADE)

    def get_absolute_url(self):
        return reverse("profile",kwargs={'pk':self.pk})

错误:

enter image description here

感谢任何帮助 谢谢!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/49519
 
250 次点击  
分享到微博
文章 [ 4 ]  |  最新文章 3 周前
Sammy J
Reply   •   1 楼
Sammy J    3 周前

我想这是你的问题 views.py 守则 User.objects.get(pk=pk) ,返回用户对象。所以你的密码一定是

user=User.objects.get(pk=pk)

model = get_object_or_404(User, pk=user.pk)
Linh Nguyen
Reply   •   2 楼
Linh Nguyen    3 周前

在要将用户id作为参数传递到url的配置文件路径中:

path('profile/',views.profile\u detail,name='profile')

但是您将用户模型而不是模板中的id传递给它:

<a class="nav-link navaour" href="{% url 'profile' pk=user.pk %}"><i class="fa fa-user"></i>&nbsp; Profile</a>

应该是这样的:

<a class="nav-link navaour" href="{% url 'profile' pk=user.id %}"><i class="fa fa-user"></i>&nbsp; Profile</a>

要将pk string转换为int进行查询,您需要fix to view:

def profile_detail(request,pk):
    model = get_object_or_404(User, pk=int(pk))
    template_name = 'profile_detail_view.html'
user6837382
Reply   •   3 楼
user6837382    3 周前
class user_register_model(models.Model):
    user = models.OneToOneField(User,on_delete=models.CASCADE)

    def __str__(self):
        return str(self.user.username)

    def get_absolute_url(self):
        return reverse("profile",kwargs={'pk':self.pk})

添加 str公司 对您的模型起作用

ha-neul
Reply   •   4 楼
ha-neul    3 周前
def profile_detail(request,pk):
    pk = User.objects.get(pk=pk)
    model = get_object_or_404(User, pk=pk)
    template_name = 'profile_detail_view.html'

尝试删除以下行:

pk = User.objects.get(pk=pk)