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

Django admin创建新Video条目时覆盖原有条目问题咨询

Django Admin创建新条目覆盖旧条目的问题解决办法

这个问题我之前踩过坑,根源出在你Video模型的id字段默认值设置上!

你现在写的是:

id = models.CharField(primary_key=True, default=uuid.uuid4().hex[:8], editable=False, max_length=8)

这里的问题是:uuid.uuid4().hex[:8]会在模型类第一次加载的时候就执行一次,生成一个固定的8位字符串。之后所有新创建的Video实例,都会用这个固定值作为主键。主键是数据库里的唯一标识,当你创建第二个条目时,因为主键和第一个重复,Django就会直接覆盖掉原来的条目,而不是创建新的。

解决办法

把默认值改成可调用的函数,让每次创建新实例时才生成新的UUID片段:

方式一:用lambda函数简化写法

import uuid
from django.db import models

class Video(models.Model):
    id = models.CharField(primary_key=True, default=lambda: uuid.uuid4().hex[:8], editable=False, max_length=8)
    title = models.TextField(max_length=100, help_text='Insert video title here', verbose_name='Title')

方式二:单独定义生成函数(更易维护)

import uuid
from django.db import models

def generate_short_unique_id():
    # 生成8位的唯一UUID片段
    return uuid.uuid4().hex[:8]

class Video(models.Model):
    id = models.CharField(primary_key=True, default=generate_short_unique_id, editable=False, max_length=8)
    title = models.TextField(max_length=100, help_text='Insert video title here', verbose_name='Title')

额外提醒

如果你已经在数据库里创建过条目,现在数据库里肯定有一个用了那个重复主键的Video记录。建议先删除这条旧数据(或者手动修改它的id为一个不重复的8位字符串),不然修改模型后创建新条目时可能还会有冲突。

内容的提问来源于stack exchange,提问作者Human Cyborg Relations

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:11:29