You need to enable JavaScript to run this app. 如何在Django的另一app中修改CustomUser模型的posts字段数据
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django的另一app中修改CustomUser模型的posts字段数据

Django跨app修改CustomUser的posts字段解决方案

前置配置验证

首先确认项目根目录的settings.py中已经配置了自定义用户模型:

# settings.py
AUTH_USER_MODEL = 'users.CustomUser'

这是跨app调用自定义用户模型的必要前提。

具体实现步骤(files app/views.py中)

不需要额外定义外键,你当前的场景是直接操作CustomUser内置的JSON类型posts字段,没有关联独立Post模型的需求,因此无需外键支持,操作流程如下:

  • 导入官方推荐的用户模型获取方法,避免硬编码依赖
from django.contrib.auth import get_user_model
from django.contrib.auth.decorators import login_required # 操作登录用户数据时用

User = get_user_model()
  • 获取需要修改的CustomUser实例,两种常见场景:
    1. 修改当前登录用户的posts字段(推荐加登录校验装饰器)
    @login_required
    def your_view(request):
        current_user = request.user
        # 后续修改逻辑
    
    1. 修改指定ID用户的posts字段
    def your_view(request):
        target_user = User.objects.get(id=用户ID)
        # 后续修改逻辑
    
  • 修改posts字段并保存
    posts是JSONField类型,默认存储字典结构,修改示例如下:
# 新增一条帖子记录,key可设为帖子ID,value存帖子相关信息
new_post_key = "post_001"
new_post_value = {"title": "作业提交", "content": "第一周作业", "create_time": "2024-05-20"}

# 修改字典字段
current_user.posts[new_post_key] = new_post_value
# 强制保存到数据库,指定update_fields可提升更新效率
current_user.save(update_fields=["posts"])

注意事项

如果需要修改posts字典内的嵌套字段值,需要手动标记字段变更,避免Django检测不到修改导致保存失效,示例如下:

# 修改嵌套字段值
current_user.posts["post_001"]["title"] = "修改后的标题"
# 标记字段已变更
current_user._meta.get_field("posts").set_attributes_from_value(current_user, current_user.posts)
current_user.save(update_fields=["posts"])

如果后续你需要将帖子抽离为独立的Post数据模型,再考虑添加外键关联,示例如下:

# 独立Post模型的外键定义示例
from django.conf import settings
from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    # 外键关联自定义用户模型
    author = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        related_name="post_set"
    )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 05:24:03