Django:菲尔德'object_id'期待一个数字,但得到了'fe2b1fd4313c'



我在尝试使用Django admin从管理部分保存模型时遇到了这个错误,这就是错误Field 'object_id' expected a number but got 'id_b2cbfe2b1fd4313c'.。我正在使用djangoshortuuid软件包https://pypi.org/project/shortuuid/在django中创建id字段,我选择使用它,因为内置的UUID字段一直给出这个错误Django UUIDField shows 'badly formed hexadecimal UUID string' error?,id看起来像这个id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=True)。短uuid字段有什么问题。

基于此,我引用:

如果您在ForeignKey上进行筛选,那么Django将在目标对象的主键上进行筛选——这通常是一个AutoField,除非您引用了另一个(唯一(列,或者将另一个主键定义为字段。

但我不知道现在可能有什么问题

型号.py

class Channel(models.Model):
id = ShortUUIDField( length=16, max_length=40, prefix="id_", alphabet="abcdefg1234", primary_key=True,)
full_name = models.CharField(max_length=200) 
user = models.OneToOneField(User, on_delete=models.SET_NULL, null=True, related_name="channel")

Views.py

def channel_profile(request, channel_name):
channel = Channel.objects.get(id=channel_name, status="active")
context = {
"channel": channel,
}
return render(request, "channel/channel.html", context)

您的数据库与迁移文件不同步,因为您的问题很容易解决,Django需要一个ID(integrer(,而您正在传递一个字符串。

如果您还没有将项目投入生产,您可以删除迁移文件夹并再次迁移,否则您需要更新迁移文件以更改UD字段的类型

最新更新