You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django无法识别手动输入的User ID问题求助

Django注册时User ID无法识别问题排查与修复

问题描述

使用Django开发Web应用,注册时系统无法识别手动输入的User ID,按User模型格式输入也无法完成注册,手动添加User ID作为临时修复也无效。

报错截图

报错截图

相关代码

urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('<int:user_id>/', views.profile, name="profile"),
    #path('signup/', views.signup, name="signup"),
    path("signup/", views.signup, name="signup")
]

views.py

from django.shortcuts import render, get_object_or_404
from django.contrib.auth import forms
from django.urls import reverse_lazy
from django.http import HttpResponse, Http404, HttpResponseRedirect
from django.template import loader
from .models import User
from .forms import SignUpForm
from datetime import datetime

def index(request):
    cool_people_list = User.objects.order_by("-username")[:5]
    _template = loader.get_template("front_page.html")
    context = {
        "cool_people_list" : cool_people_list,
    }
    return HttpResponse(_template.render(context, request))

def profile(request, user_id):
    try:
        user = get_object_or_404(User, pk=user_id)
        _template = loader.get_template("profile.html")
        context = {
            "user" : user
        }
        return HttpResponse(_template.render(context, request))
    except:
        raise Http404("The user you are looking for doesn't exist.")

def signup(request):
    if request.method == "POST":
        form = SignUpForm(request.POST)

        if form.is_valid():
            # 获取表单中用户输入的User ID(需确保SignUpForm包含user_id字段)
            user_id = form.cleaned_data.get("user_id")
            username = form.cleaned_data.get("username")
            password = form.cleaned_data.get("password")
            # 生成符合模型字段要求的日期时间对象
            join_date = datetime.today().date()
            last_online = datetime.now()
            
            # 用关键字参数创建User对象,避免位置参数顺序错误
            new_user = User(
                user_id=user_id,
                username=username,
                password=password,
                join_date=join_date,
                last_online=last_online
            )
            new_user.save()
            # 注册成功后重定向,防止表单重复提交
            return HttpResponseRedirect(reverse_lazy('index'))
    else:
        # GET请求时初始化表单
        form = SignUpForm()
    
    return render(request, "signup.html", {"form": form})

models.py

from django.db import models
from django.core.validators import MinLengthValidator
import datetime

class User(models.Model):
    # 将user_id设为主键,确保系统能正确识别并维护唯一性
    user_id = models.IntegerField(primary_key=True, unique=True)
    username = models.CharField(max_length=25, validators=[MinLengthValidator(3)])
    password = models.CharField(max_length=25, validators=[MinLengthValidator(7)])
    join_date = models.DateField()
    last_online = models.DateTimeField()

    def __str__(self):
        return self.username

关键修复点

  1. 模型主键配置:在models.py中把user_id设置为primary_key=True,让Django将其作为用户表的主键,确保系统能正确识别User ID的唯一性。
  2. 移除硬编码User ID:原代码中手动写死User(3, ...)是核心错误,改为从表单获取用户输入的User ID。
  3. 字段赋值规范:创建User对象时使用关键字参数,避免因位置参数顺序错误导致字段匹配混乱。
  4. 日期类型修正:将join_date和last_online改为生成date/datetime对象,而非字符串,匹配模型字段的类型要求。
  5. 完善表单流程:补充GET请求的表单初始化逻辑,注册成功后添加重定向,避免重复提交问题。

内容的提问来源于stack exchange,提问作者kool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:20:27