gpt4 book ai didi

python - 将 SearchVectorField 添加到 Django 中的模型

转载 作者:太空宇宙 更新时间:2023-11-03 14:06:24 25 4
gpt4 key购买 nike

所以我正在尝试添加 SearchVectorField到 Django 中的模型:

class JobPosting(models.Model):
...
...
search_vector = SearchVectorField()

我知道它应该是 nullable 或具有能够迁移的默认值,因此我删除了表中的所有条目以防止出现此问题。

但是,在运行 makemigrations 时出现以下错误:

You are trying to add a non-`nullable` field 'search_vector' to jobposting without a default;
we can't do that (the database needs something to populate existing rows).
Please select a fix:
1) Provide a one-off default now
(will be set on all existing rows with a null value for this column)
2) Quit, and let me add a default in models.py
Select an option:

如果表是空的,为什么会这样说?我不想让该列可以为空,如果可以避免的话,我宁愿没有默认值。

我的问题是,是否有任何方法可以强制执行 makemigrationsmigrate,因为如果表为空,我不明白这个问题。我还有其他表,其中包含我不想删除的数据,因此无法删除数据库中的所有信息。

或者,如果选项 1) 是解决方案,我将如何格式化此类字段的默认值?我认为这不是普通的文本字段?

感谢您的帮助。

最佳答案

我不完全确定您为什么不想使用默认值,但我会假设这是给定的。

My question is, is there any way to force makemigrations and migrate as I don't understand the problem if the table is empty.

您的当前 数据库表可能是空的,但迁移应该可以在其他数据库实例上重复。因此 Django 不能假设同样适用于任何其他数据库。

解决方法可能是定义一个迁移,该迁移将字段创建为可为空,为所有条目编制索引,然后将其更新为不可为空。

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.contrib.postgres.search import SearchVector, SearchVectorField
from django.db import migrations


def index_entries(apps, schema_editor):
Entry = apps.get_model("mymodel", "Entry")
Entry.objects.update(search_vector=SearchVector('body_text'))


class Migration(migrations.Migration):

dependencies = [
('mymodel', '0001_initial'),
]

operations = [
migrations.AddField(
model_name='entry',
name='search_vector',
field=SearchVectorField(null=True),
),

migrations.RunPython(index_entries),

migrations.AlterField(
model_name='entry',
name='search_vector',
field=SearchVectorField(null=False),
),
]

关于python - 将 SearchVectorField 添加到 Django 中的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43259865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com