gpt4 book ai didi

python - 作为可调用的默认值仅在 django 迁移期间调用一次

转载 作者:行者123 更新时间:2023-12-05 06:41:29 25 4
gpt4 key购买 nike

我创建了以下基本的 Django 模型:

import string
import random

from django.db import models

def create_short_url():
size = 6
chars = string.ascii_uppercase + string.digits
url = ''.join(random.choice(chars) for _ in range(size))
print("\nSHORT_URL:%s\n" % url)
return url

class ShortURL(models.Model):
url = models.CharField(max_length=220, )
shortcode = models.CharField(max_length=15, unique=True, default=create_short_url)

def __str__(self):
return str(self.url)

首先,我只对 url 字段进行了编码。然后我添加了 shortcode 字段并提供了一个函数来调用以创建默认的唯一值。Django 的文档说

If callable it will be called every time a new object is created.

不幸的是,在运行迁移时,我只看到生成了一个短 url 和以下异常:

$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions, shortener
Running migrations:
Applying shortener.0002_auto_20161107_1529...
SHORT_URL:43AY7G

Traceback (most recent call last):
File "/home/user/django1.10/py3/lib/python3.5/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "/home/user/django1.10/py3/lib/python3.5/site-packages/django/db/backends/sqlite3/base.py", line 337, in execute
return Database.Cursor.execute(self, query, params)
sqlite3.IntegrityError: UNIQUE constraint failed: shortener_shorturl.shortcode

为每个正在迁移的条目调用该函数缺少什么?

最佳答案

最初,您需要推迟短代码字段的唯一约束并允许空值,然后重新创建并运行您的迁移。(不要忘记删除失败的迁移)

class ShortURL(models.Model):
url = models.CharField(max_length=220, )
shortcode = models.CharField(max_length=15, null=True)

def __str__(self):
return str(self.url)

之后,1) 创建一个新的空迁移并添加一个利用您的 create_short_url() 的 RunPython 操作。2) 将模型更改为原始定义并创建新的自动迁移并运行它。

有关更多信息,请参阅此处:Migrations that add unique fields

关于python - 作为可调用的默认值仅在 django 迁移期间调用一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40468928/

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