审核商品种子脚本改用小程序默认头像相对路径 beijing/morentouxiang.jpg。

优先读取 tupianpeizhi leixing=2 配置;已存在商品会同步更新图标路径。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-07-11 01:29:47 +08:00
parent 241a362eb4
commit 59af2fc18a

View File

@@ -19,8 +19,24 @@ from django.db import transaction
from shangpin.models import Shangpin, ShangpinLeixing, ShangpinZhuanqu from shangpin.models import Shangpin, ShangpinLeixing, ShangpinZhuanqu
# 与 UserMain 默认头像一致,前端 OSS 拼接后可正常显示 # 小程序点单/头像拼接用的相对路径(与 peizhi GetDynamicConfig otherConfig.morentouxiang 默认一致)
DEFAULT_PRODUCT_IMAGE = 'a_long/morentouxiang.jpg' FALLBACK_DEFAULT_AVATAR = 'beijing/morentouxiang.jpg'
def get_default_avatar_relative_url():
"""
默认头像相对 URL
1. 优先读后台 tupianpeizhi 表 leixing=2默认头像图片配置
2. 否则用 beijing/morentouxiang.jpg小程序动态配置默认值
"""
try:
from peizhi.models import Tupianpeizhi
row = Tupianpeizhi.objects.filter(leixing=2).only('tupian').first()
if row and row.tupian:
return str(row.tupian).strip().lstrip('/')
except Exception:
pass
return FALLBACK_DEFAULT_AVATAR
AUDIT_TYPE_NAME = '电竞休闲体验' AUDIT_TYPE_NAME = '电竞休闲体验'
@@ -112,7 +128,9 @@ class Command(BaseCommand):
return return
if dry_run: if dry_run:
avatar_url = get_default_avatar_relative_url()
self.stdout.write(self.style.NOTICE('【预览模式】将写入以下结构:')) self.stdout.write(self.style.NOTICE('【预览模式】将写入以下结构:'))
self.stdout.write(f' 商品图标相对路径: {avatar_url}')
self.stdout.write(f' 类型 1 个: {AUDIT_TYPE_NAME} (shenhezhuangtai=2)') self.stdout.write(f' 类型 1 个: {AUDIT_TYPE_NAME} (shenhezhuangtai=2)')
self.stdout.write(f' 专区 {len(ZONES)}') self.stdout.write(f' 专区 {len(ZONES)}')
self.stdout.write(f' 商品 {len(PRODUCTS)} 个 (shenhezhuangtai=2)') self.stdout.write(f' 商品 {len(PRODUCTS)} 个 (shenhezhuangtai=2)')
@@ -122,17 +140,23 @@ class Command(BaseCommand):
return return
with transaction.atomic(): with transaction.atomic():
default_image = get_default_avatar_relative_url()
leixing, _ = ShangpinLeixing.objects.get_or_create( leixing, _ = ShangpinLeixing.objects.get_or_create(
jieshao=AUDIT_TYPE_NAME, jieshao=AUDIT_TYPE_NAME,
shenhezhuangtai=2, shenhezhuangtai=2,
defaults={ defaults={
'tupian_url': DEFAULT_PRODUCT_IMAGE, 'tupian_url': default_image,
'paixu': 9999, 'paixu': 9999,
'is_cross_enabled': False, 'is_cross_enabled': False,
'is_special_type': False, 'is_special_type': False,
}, },
) )
# 已存在类型时同步图标为当前默认头像
if leixing.tupian_url != default_image:
leixing.tupian_url = default_image
leixing.save(update_fields=['tupian_url'])
zone_map = {} zone_map = {}
for name, paixu in ZONES: for name, paixu in ZONES:
zone, _ = ShangpinZhuanqu.objects.get_or_create( zone, _ = ShangpinZhuanqu.objects.get_or_create(
@@ -147,11 +171,13 @@ class Command(BaseCommand):
skipped = 0 skipped = 0
for zone_name, title, price, sales, sort_weight, desc in PRODUCTS: for zone_name, title, price, sales, sort_weight, desc in PRODUCTS:
zhuanqu = zone_map[zone_name] zhuanqu = zone_map[zone_name]
if Shangpin.objects.filter( exists_qs = Shangpin.objects.filter(
biaoqian=title, biaoqian=title,
shenhezhuangtai=2, shenhezhuangtai=2,
zhuanqu_id=zhuanqu.id, zhuanqu_id=zhuanqu.id,
).exists(): )
if exists_qs.exists():
exists_qs.update(tupian_url=default_image)
skipped += 1 skipped += 1
continue continue
Shangpin.objects.create( Shangpin.objects.create(
@@ -164,7 +190,7 @@ class Command(BaseCommand):
duiwai_xiaoliang=sales, duiwai_xiaoliang=sales,
jieshao=desc, jieshao=desc,
xiadan_xuzhi=ORDER_NOTICE, xiadan_xuzhi=ORDER_NOTICE,
tupian_url=DEFAULT_PRODUCT_IMAGE, tupian_url=default_image,
yaoqiuleixing=None, yaoqiuleixing=None,
huiyuan_id=None, huiyuan_id=None,
yongjin=None, yongjin=None,
@@ -177,7 +203,7 @@ class Command(BaseCommand):
self.stdout.write(self.style.SUCCESS( self.stdout.write(self.style.SUCCESS(
f'完成:类型 id={leixing.id},专区 {len(zone_map)} 个,' f'完成:类型 id={leixing.id},专区 {len(zone_map)} 个,'
f'新建商品 {created} 个,跳过已存在 {skipped} 个。' f'新建商品 {created} 个,跳过已存在 {skipped},图标={default_image}'
)) ))
self.stdout.write('请将 xcx_sys_peizhi.shangpin_shenhe_mode 设为 2 后,小程序点单页即展示审核商品。') self.stdout.write('请将 xcx_sys_peizhi.shangpin_shenhe_mode 设为 2 后,小程序点单页即展示审核商品。')