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

如何让Django表单下拉框仅显示当前作者创建的主题?

实现仅显示当前用户创建的主题下拉选项

要让创建条目时的主题下拉框只显示当前登录用户自己的主题,你可以通过以下方式实现:

1. 过滤表单的主题选项

在views.py的CreateTopicEntry类中重写get_form方法,修改topic字段的查询集,只加载当前用户创建的主题:

class CreateTopicEntry(LoginRequiredMixin, CreateView):
    model = Entries
    fields = ['topic', 'name','text','entries_image']

    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)
    
    # 新增方法:过滤主题选项
    def get_form(self, form_class=None):
        form = super().get_form(form_class)
        # 只保留当前用户创建的主题
        form.fields['topic'].queryset = Topic.objects.filter(author=self.request.user)
        return form

2. 后端验证(可选但推荐)

为了防止用户通过篡改请求参数提交不属于自己的主题,在form_valid方法中添加验证逻辑,确保选中的主题确实属于当前用户:

def form_valid(self, form):
    # 验证选中主题的归属
    selected_topic = form.cleaned_data['topic']
    if selected_topic.author != self.request.user:
        form.add_error('topic', '你只能选择自己创建的主题')
        return self.form_invalid(form)
    
    form.instance.author = self.request.user
    return super().form_valid(form)

修改完成后,前端下拉框只会显示当前用户的主题,同时后端会额外验证提交数据的合法性,双重保障业务逻辑的安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 05:22:18