You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Django模型的ArrayField字段正确设置默认值

问题根因说明

  1. ArrayField内部CharField默认值不生效:Django设计上会忽略ArrayField包裹的base字段的default配置,该配置仅在字段作为独立模型字段使用时生效,因此内部设置的默认值本身就不会被读取。
  2. 外层默认列表不生效:你定义的default_item_game_types函数返回值格式错误,直接调用list(GameType)得到的是TextChoices的枚举成员对象,而非存储用的字符串值,Django无法将其识别为合法选项值,导致默认值加载失败。

解决方案

  1. 修正默认值函数的返回值,改为返回枚举成员的value组成的列表:
def default_item_game_types():
    '''默认返回所有游戏类型,若只需默认solo模式可改为 return [GameType.SOLOCOOP]
    '''
    return [gt.value for gt in GameType]
  1. 调整ArrayField定义,删除内部冗余的default配置:
game_types = ArrayField(
    models.CharField(
        max_length=40,
        choices=GameType.choices
    ), 
    default=default_item_game_types, 
    null=False, 
    blank=False
)
  1. 若CMS后台表单仍未加载默认值,是因为部分CMS表单组件不会自动读取模型层默认值,需手动在表单/Admin类中指定初始值,示例如下:
from django.contrib import admin
from .models import Item
from .utils import default_item_game_types # 替换为你实际的函数导入路径

class ItemAdmin(admin.ModelAdmin):
    def get_initial(self, request):
        initial = super().get_initial(request)
        initial['game_types'] = default_item_game_types()
        return initial

admin.site.register(Item, ItemAdmin)

内容的提问来源于stack exchange,提问作者steven drouet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 08:30:02