diff --git a/shangpin/management/commands/seed_audit_shangpin.py b/shangpin/management/commands/seed_audit_shangpin.py index 49eec84..07e44da 100644 --- a/shangpin/management/commands/seed_audit_shangpin.py +++ b/shangpin/management/commands/seed_audit_shangpin.py @@ -19,8 +19,24 @@ from django.db import transaction from shangpin.models import Shangpin, ShangpinLeixing, ShangpinZhuanqu -# 与 UserMain 默认头像一致,前端 OSS 拼接后可正常显示 -DEFAULT_PRODUCT_IMAGE = 'a_long/morentouxiang.jpg' +# 小程序点单/头像拼接用的相对路径(与 peizhi GetDynamicConfig otherConfig.morentouxiang 默认一致) +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 = '电竞休闲体验' @@ -112,7 +128,9 @@ class Command(BaseCommand): return if dry_run: + avatar_url = get_default_avatar_relative_url() 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' 专区 {len(ZONES)} 个') self.stdout.write(f' 商品 {len(PRODUCTS)} 个 (shenhezhuangtai=2)') @@ -122,17 +140,23 @@ class Command(BaseCommand): return with transaction.atomic(): + default_image = get_default_avatar_relative_url() leixing, _ = ShangpinLeixing.objects.get_or_create( jieshao=AUDIT_TYPE_NAME, shenhezhuangtai=2, defaults={ - 'tupian_url': DEFAULT_PRODUCT_IMAGE, + 'tupian_url': default_image, 'paixu': 9999, 'is_cross_enabled': False, 'is_special_type': False, }, ) + # 已存在类型时同步图标为当前默认头像 + if leixing.tupian_url != default_image: + leixing.tupian_url = default_image + leixing.save(update_fields=['tupian_url']) + zone_map = {} for name, paixu in ZONES: zone, _ = ShangpinZhuanqu.objects.get_or_create( @@ -147,11 +171,13 @@ class Command(BaseCommand): skipped = 0 for zone_name, title, price, sales, sort_weight, desc in PRODUCTS: zhuanqu = zone_map[zone_name] - if Shangpin.objects.filter( + exists_qs = Shangpin.objects.filter( biaoqian=title, shenhezhuangtai=2, zhuanqu_id=zhuanqu.id, - ).exists(): + ) + if exists_qs.exists(): + exists_qs.update(tupian_url=default_image) skipped += 1 continue Shangpin.objects.create( @@ -164,7 +190,7 @@ class Command(BaseCommand): duiwai_xiaoliang=sales, jieshao=desc, xiadan_xuzhi=ORDER_NOTICE, - tupian_url=DEFAULT_PRODUCT_IMAGE, + tupian_url=default_image, yaoqiuleixing=None, huiyuan_id=None, yongjin=None, @@ -177,7 +203,7 @@ class Command(BaseCommand): self.stdout.write(self.style.SUCCESS( 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 后,小程序点单页即展示审核商品。')