Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django ContentTypes将uuid字段转换为整数字段_Django_Postgresql - Fatal编程技术网

Django ContentTypes将uuid字段转换为整数字段

Django ContentTypes将uuid字段转换为整数字段,django,postgresql,Django,Postgresql,我遇到这样一种情况,即ForeignKey的object\u id接受PositiveIntegerField,但我的模型的所有id都设置为uuid 我查阅了文档,发现我应该使用get_prep_value(value)或get_db_prep_value(value,connection,prepared=False)^ 问题是我到底应该怎么做 这是包含外国关系的模型代码 target_ct = models.ForeignKey(ContentType,

我遇到这样一种情况,即
ForeignKey
object\u id
接受
PositiveIntegerField
,但我的模型的所有
id
都设置为
uuid

我查阅了文档,发现我应该使用
get_prep_value(value)
get_db_prep_value(value,connection,prepared=False)^

问题是我到底应该怎么做

这是包含
外国关系的模型代码

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)
类MyModel(models.Model):
target\u ct=models.ForeignKey(
内容类型,
空白=真,
空=真,
相关的_name='target_obj',
on_delete=models.CASCADE
)
target_id=models.UUIDField(
空=真,
空白=真,
db_index=True
)
target=GenericForeignKey('target\u ct','target\u id')
创建的\u at=models.datetime字段(自动\u now\u add=True,db\u index=True)
然后,您可以引用将
UUIDField
作为主键的所有对象


然而,这正是为什么使用
自动字段
作为主键通常更好的原因之一:如果所有模型都具有相同的主键,则可以使用该主键引用所有对象。现在,您只能使用
UUIDField
作为主键引用模型。

我已经尝试过了,当我尝试将其迁移为uuid字段
django.db.utils.ProgrammingError:无法将类型integer转换为uuid行1:…“ALTER COLUMN”target_id“type uuid USING”target_id“::uuid
@h1dd3n:问题是您无法更改列类型。您最好先删除列,进行迁移,然后添加新列。