gpt4 book ai didi

python - 将 UUIDField 转换为 CharField

转载 作者:行者123 更新时间:2023-12-01 09:00:15 25 4
gpt4 key购买 nike

这是我目前在 models.py 中的内容:

class Campaign(models.Model):
campaign_id = UUIDField(auto=True)
name = models.CharField("Campaign Name", max_length=255)

class CampaignResponse(models.Model):
campaign = models.ForeignKey(Campaign)
user = models.EmailField("Email", max_length=200)
response = models.TextField()

最近我正在考虑将 Campaign 模型中的 Campaign_id 从 UUIDField 更改为 CharField,但是当我尝试这样做时,我注意到 Campaign_id 的数据是被更改(例如,使用 UUIDField 时数据为 "7182c679f72844ca83c9648a120bb066",但现在变为 "7182c679-f728-44ca-83c9-648a120bb066" 将其转换为 CharField 后)。

是否需要遵循一些步骤才能将 UUIDField 转换为 CharField 而无需更改数据并确保 Campaign 和 CampaignResponse 之间的关系 没有损坏?

最佳答案

campaign_id 不是模型营销事件的主键。但这可能是最好的,因为现在当您将 UUID 转换为 CharField 时,您的关系不会中断。

首先创建campaign_id CharField

campaign_id = models.CharField(max_length=36, ) # add other stuff too which you want like unique etc.

关于从 uuid 转换为 str,打开 shell py manage.py shell 并运行:

from myApp.models import Campaign
for c in Campaign.objects.all():
c.campaign_id = str(c.campaign_id).replace('-', '')

检查您的数据库以确保其正常工作。现在,您可以将 CharField 的 max_length 减少到 32,因为 Campaign_id 中的所有额外破折号 (-) 都消失了。

仅仅因为字段是 UUID 并不意味着它是主键。要使字段成为主键,您需要传递primary_key=True。你可以像这样制作主键

id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

关于python - 将 UUIDField 转换为 CharField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52511804/

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