【问题标题】:Django Error: int() argument must be a string, a bytes-like object or a number, not 'User'Django 错误:int() 参数必须是字符串、类似字节的对象或数字,而不是“用户”
【发布时间】:2019-11-12 04:03:30
【问题描述】:

如何修复此错误:

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

我想创建我厌倦了修复的用户配置文件!

我想在他注册时创建用户页面但我一次又一次收到此错误

Base.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 %}  

Urls.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')

]

Views.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'

这是我的 Models.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})

错误:

感谢任何帮助 谢谢!

【问题讨论】:

    标签: python django django-models django-templates django-views


    【解决方案1】:
    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)
    

    【讨论】:

    • 您好,我需要创建 Url 配置文件,但我还希望如果有人注销它可以显示人员配置文件
    • @HamzaLachi您是要向所有人显示用户个人资料吗?
    • 是的,你是对的,我正试图向所有人展示个人资料
    • 无论如何感谢我的帮助投票并接受答案,我再次投票给你所有的问题广告答案谢谢!
    • @HamzaLachi 公开个人资料和创建或编辑用户自己的个人资料应该不同。主要区别 1) 不需要{% if user.is_authenticated %} 2) 在``` "{% url 'profile' pk=user.pk %}" ``` 中,pk 可以是pk=post.author.pk,类似的。非常感谢您的支持!
    【解决方案2】:
    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 函数

    【讨论】:

      【解决方案3】:

      在配置文件路径中,您希望将用户 ID 作为参数传递给 url:

      path('profile/',views.profile_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字符串转换为int进行查询:

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

      【讨论】:

      • 仍然出现同样的错误!
      • 您能否将错误的完整堆栈跟踪发布到您的问题中?
      • 问题更新请检查!
      • 将字符串 pk 传递给需要 int 的 get 对象查询存在问题]
      【解决方案4】:

      我猜这是您的views.py 代码User.objects.get(pk=pk) 中的问题,返回用户对象。所以你的代码必须是

      user=User.objects.get(pk=pk)
      
      model = get_object_or_404(User, pk=user.pk)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多