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

Django中为每个UUID生成唯一链接报错:无法解析slug字段

解决Django中UUID查询的FieldError问题

问题根源

  1. 字段不存在:Get_Customer_ID模型里没有定义slug字段,但视图代码中用了get(slug=uid)进行查询,导致Django无法识别该字段。
  2. 查询语法错误:get(slug=uid) or id=uid是错误写法,Django的get()方法不支持这种逻辑判断,必须明确指定正确的查询字段。
  3. 模型与数据库不匹配:Get_Customer_ID未显式定义UUID主键,Django默认会生成自增id字段,和数据库中UUID作为主键的结构冲突。
  4. URL参数不匹配:URL路径定义了<str:id>和<slug:uid>两个参数,但视图函数只接收uid,参数数量不对应。

修复步骤

1. 修正模型定义

显式声明Get_Customer_ID的主键为UUID字段,和数据库结构对齐:

import uuid
from django.db import models

class Product(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

class Get_Customer_ID(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    # 根据数据库实际结构,添加其他需要的字段

    class Meta:
        db_table = "TABLE_NAME"

2. 修复视图查询逻辑

将错误的slug=uid改为id=uid,同时修正参数匹配问题:

情况1:保留URL中的两个参数

# view.py
def Insert_Record(request, id, uid):
    obj_uid = Get_Customer_ID.objects.get(id=uid)
    # 后续业务逻辑

情况2:移除URL中多余的id参数

如果URL里的<str:id>是冗余的,直接修改URL配置:

# url.py
path('form/<slug:uid>', views.Insert_Record),

对应的视图调整为:

# view.py
def Insert_Record(request, uid):
    obj_uid = Get_Customer_ID.objects.get(id=uid)
    # 后续业务逻辑

3. 确认URL参数类型

UUID的字符(包含-)符合slug参数的规则,用<slug:uid>或<str:uid>都可以,只要和视图接收的参数名一致即可。

验证

修复完成后,访问对应链接时,Django会通过UUID主键正确查询到Get_Customer_ID的记录,不会再抛出FieldError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:53:14