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

Django表单:为博客组用户显示额外分类的问题排查

问题分析与修复方案

核心问题点

  1. 用户组判断逻辑错误:当前代码通过User.objects.filter(groups__name='blogger').exists()检查系统中是否存在blogger组用户,而非判断当前登录用户是否属于该组——这会导致只要系统里有blogger用户,所有用户都会看到专属分类。
  2. 分类选项覆盖而非追加:给blogger用户设置分类时直接替换了初始3个分类,没有合并,导致blogger用户看不到普通分类。

修复后的代码

class PostCreateForm(ModelForm):
    
    class Meta:
        model = Post
        fields = [
            "title",
            "category",
            "associated_portfolios",
            "body",
        ]
        exclude = ('allow_comments',)
        

    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user', None)
        # 判断当前用户是否属于blogger组(先检查user是否有效)
        is_blogger = user.groups.filter(name='blogger').exists() if user else False
        print("Current User:", user)
        print("Is Blogger:", is_blogger)

        super().__init__(*args, **kwargs)
        # 先设置普通用户的基础分类
        base_categories = [
            ("Watchlist", "Watchlist"),
            ("Lesson/Review", "Lesson/Review"),
            ("General", "General"),
        ]
        self.fields['category'].choices = base_categories
        
        # 若是blogger用户,追加专属分类
        if is_blogger:
            blogger_categories = [
                ("Analysis", "Analysis"),
                ("Milestone", "Milestone"),
                ("Features", "Features"),
                ("Tutorials", "Tutorials"),
                ("Careers", "Careers"),
                ("Community", "Community"),
            ]
            # 合并基础分类与专属分类
            self.fields['category'].choices += blogger_categories

关键修改说明

  • 修正用户身份判断:改用user.groups.filter(name='blogger').exists(),同时增加user非空判断,确保基于当前登录用户的组身份进行逻辑处理。
  • 分类合并逻辑:先设置普通用户的3个基础分类,再为blogger用户追加专属分类,实现"blogger用户可见全部分类"的需求。
  • 简化语法:Python 3+环境下直接使用super().__init__,无需显式传入类名和self,代码更简洁。

修改后效果:

  • 普通用户仅显示初始3个分类
  • blogger组用户显示基础3个分类 + 专属6个分类,共9个分类

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:15:59