【问题标题】:Django Generic Foreign Key invalid literal for int() with base 10基数为 10 的 int() 的 Django 通用外键无效文字
【发布时间】: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.auth User 模型,那么User.objects.get(pk="7_p1seHP7FR0KxN9+hHaCaNg") 引发完全相同的错误。您没有发布您的 User 模型定义,也没有发布完整的回溯,所以我认为值得一提...

标签: python django django-models


【解决方案1】:

here 它说通用外键可以是字符:

...例如,如果您想允许与模型的通用关系 IntegerField 或 CharField 主键字段,您可以使用 CharField 用于模型上的“object_id”字段,因为整数可以 被 get_db_prep_value() 强制转换成字符串...

它可以是原始主键可以强制转换/强制转换的任何内容。您也可以使用 TextField,但要以性能为代价。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    相关资源
    最近更新 更多