【发布时间】:2015-05-19 10:15:49
【问题描述】:
我有一个使用通用外键的模型
class Flag(TimeStampedModel):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
但是,当我尝试保存 ForeignKey 为 base64 编码的新标志时,我收到错误:
ValueError: int() 以 10 为底的无效文字:'7_p1seHP7FR0KxN9+hHaCaNg'
看来通用外键只能是一个整数!我该如何解决这个问题,因为并非我的所有键都是整数。
我如何得到错误:
u = User.objects.get(pk="7_p1seHP7FR0KxN9+hHaCaNg") Flag.objects.create(content_object=u)
【问题讨论】:
-
这里说它可以是一个字符,对吧? docs.djangoproject.com/en/dev/ref/contrib/contenttypes
-
"...例如,如果您想允许与具有 IntegerField 或 CharField 主键字段的模型的通用关系,您可以将 CharField 用于模型上的“object_id”字段,因为整数可以是被 get_db_prep_value() 强制转换成字符串..."
-
所以可能是
object_id = models.CharField()? -
是的,我想是的。试试看。阅读文档,它可以是原始主键可以强制转换/强制转换的任何内容。您也可以使用 TextField,但要以性能为代价。
-
仅作记录:如果您的
User类是股票django.contrib.authUser模型,那么User.objects.get(pk="7_p1seHP7FR0KxN9+hHaCaNg")将 引发完全相同的错误。您没有发布您的User模型定义,也没有发布完整的回溯,所以我认为值得一提...
标签: python django django-models