49 lines
1.4 KiB
Python
49 lines
1.4 KiB
Python
# Generated manually for user_id (shareable ID for friend/product search)
|
||
|
||
import secrets
|
||
import string
|
||
from django.db import migrations, models
|
||
|
||
|
||
def generate_user_id_for_user(User):
|
||
alphabet = string.ascii_lowercase + string.digits
|
||
for _ in range(10):
|
||
candidate = "U" + "".join(secrets.choice(alphabet) for _ in range(8))
|
||
if not User.objects.filter(user_id=candidate).exists():
|
||
return candidate
|
||
return "U" + secrets.token_hex(4)
|
||
|
||
|
||
def populate_user_id(apps, schema_editor):
|
||
User = apps.get_model("users", "User")
|
||
for user in User.objects.filter(user_id__isnull=True).iterator():
|
||
user.user_id = generate_user_id_for_user(User)
|
||
user.save(update_fields=["user_id"])
|
||
|
||
|
||
def noop(apps, schema_editor):
|
||
pass
|
||
|
||
|
||
class Migration(migrations.Migration):
|
||
|
||
dependencies = [
|
||
("users", "0004_rename_friendreq_receiver_status_idx_friend_requ_receive_383c2c_idx_and_more"),
|
||
]
|
||
|
||
operations = [
|
||
migrations.AddField(
|
||
model_name="user",
|
||
name="user_id",
|
||
field=models.CharField(
|
||
blank=True,
|
||
help_text="可分享的用户ID,用于好友搜索、商品搜索等",
|
||
max_length=16,
|
||
null=True,
|
||
unique=True,
|
||
verbose_name="用户ID",
|
||
),
|
||
),
|
||
migrations.RunPython(populate_user_id, noop),
|
||
]
|