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

如何在Django URL中传递字符串变量?遇ValueError问题求助

问题根源

你遇到的ValueError是因为模型里的urlname字段是ForeignKey(外键),而非存储字符串的字段。外键在数据库中存储的是关联对象的ID(数字类型),当你用Example.objects.get(urlname=url)传入字符串'test'时,Django会尝试将这个字符串当作关联对象的ID匹配,自然会报错“期望数字却得到'test'”。

解决方案

根据你通过URL传递字符串'test'获取Example对象的需求,分两种情况处理:


情况1:你实际想把urlname作为字符串标识(不是外键)

如果urlname是用来存储URL别名类的字符串(比如'test'),需将字段类型改为CharField:

  1. 修改Example模型:
class Example(models.Model):
    # 替换原ForeignKey为CharField,建议加unique保证每个urlname唯一
    urlname = models.CharField(max_length=255, unique=True)
    name = models.ForeignKey(Topic, on_delete=models.SET_NULL, null=True)
    desc = models.TextField()
    image = models.ImageField(upload_to='files/examples')

    def __str__(self):
        return self.desc[:50]
  1. 执行数据库迁移命令:
python manage.py makemigrations
python manage.py migrate
  1. 保持原视图和URL配置不变,此时Example.objects.get(urlname=url)就能正确匹配字符串'test'。

情况2:urlname确实需要关联另一个模型

如果你确实需要urlname作为外键关联其他模型(比如有个UrlName模型,包含字符串类型的标识字段如slug):

  1. 先修正模型里的外键关联(关联模型类名要大写,比如UrlName而非urlname):
class Example(models.Model):
    # 假设关联的模型是UrlName,类名首字母大写
    urlname = models.ForeignKey(UrlName, on_delete=models.SET_NULL, null=True)
    name = models.ForeignKey(Topic, on_delete=models.SET_NULL, null=True)
    desc = models.TextField()
    image = models.ImageField(upload_to='files/examples')

    def __str__(self):
        return self.desc[:50]
  1. 修改视图查询逻辑,通过双下划线关联查询匹配关联模型的字符串字段:
def example(request, url):
    # 假设UrlName模型里用于标识的字段是slug,值为'test'
    example = Example.objects.get(urlname__slug=url)
    context = {'example': example}
    return render(request, 'example/example.html', context)
额外提示
  • 模型中外键关联必须写正确的模型类名(首字母大写),否则会找不到对应模型。
  • 如果用CharField存储urlname,建议用get_object_or_404替代get,找不到对象时返回404页面更友好:
from django.shortcuts import get_object_or_404

def example(request, url):
    example = get_object_or_404(Example, urlname=url)
    context = {'example': example}
    return render(request, 'example/example.html', context)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:29:54