django - Django ContentTypes 将 uuid 字段转换为整数字段
问题描述
我有一种情况,object_id
forForeignKey
接受 aPositiveIntegerField
但id's
我的所有模型都设置为uuid
.
我查阅了文档,发现我应该使用get_prep_value(value)
或get_db_prep_value(value, connection, prepared=False)¶
问题是我应该怎么做?
这是包含模型的代码foreignRelation
target_ct = models.ForeignKey(ContentType,
blank=True,
null=True,
related_name='target_obj',
on_delete=models.CASCADE)
target_id = models.PositiveIntegerField(null=True,
blank=True,
db_index=True)
target = GenericForeignKey('target_ct', 'target_id')
created_at = models.DateTimeField(auto_now_add=True,
db_index=True)
所有其他模型的字段
id = models.UUIDField(default=uuid4, primary_key=True, editable=False)
每当我尝试使用当前设置保存模型时,我都会收到此错误
django.db.utils.DataError:整数超出范围
解决方案
您也将其UUIDField
设为:
class MyModel(models.Model):
target_ct = models.ForeignKey(
ContentType,
blank=True,
null=True,
related_name='target_obj',
on_delete=models.CASCADE
)
target_id = models.UUIDField(
null=True,
blank=True,
db_index=True
)
target = GenericForeignKey('target_ct', 'target_id')
created_at = models.DateTimeField(auto_now_add=True, db_index=True)
然后,您可以引用所有具有 aUUIDField
作为主键的对象。
然而,这正是使用 aAutoField
作为主键通常更好的原因之一:如果所有模型都具有相同的主键,您可以使用它来引用所有对象。现在有了这个,您只能引用具有 aUUIDField
作为主键的模型。
推荐阅读
- python - 将“正常”向量输入 MLP 并接收 *one* 输出值作为结果的正确方法是什么?
- google-apps-script - Google Scripts Concatenate Cells in different columns
- scala - 逐行读取数据集并将每个空格分隔的行转换为 Scala 中的逗号分隔
- elasticsearch - 如何在弹性搜索中处理自相交的 GeoJson 多边形
- sql - 从oracle中的json维度数组中获取值
- ios - 使用 swift 在 iOS 中使用 ChromeCast
- python - 使用绘图和导航栏生成 HTML
- sql - 从 SQL 中的字符串中获取第二个
- linux - 无法为 uclibc 交叉编译 dropbear
- wordpress - 为更新提供 wordpress SSH 访问权限是否安全?