From 59af2fc18a69ed9aa6fdac2dd9ec05e165187f14 Mon Sep 17 00:00:00 2001 From: XingQue Date: Sat, 11 Jul 2026 01:29:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E5=95=86=E5=93=81=E7=A7=8D?= =?UTF-8?q?=E5=AD=90=E8=84=9A=E6=9C=AC=E6=94=B9=E7=94=A8=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E9=BB=98=E8=AE=A4=E5=A4=B4=E5=83=8F=E7=9B=B8=E5=AF=B9?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=20beijing/morentouxiang.jpg=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优先读取 tupianpeizhi leixing=2 配置;已存在商品会同步更新图标路径。 Co-authored-by: Cursor --- .../commands/seed_audit_shangpin.py | 40 +++++++++++++++---- 1 file changed, 33 insertions(+), 7 deletions(-) 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 后,小程序点单页即展示审核商品。')