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

Django如何过滤Patient模型外键仅展示Docteur用户组的用户

解决方法

你需要为Patient模型对应的表单/Admin配置做修改,对doctor外键的可选查询集进行过滤即可,不需要修改你贴出的用户注册相关RegisterForm代码:

方法1:自定义Patient表单使用

在patient应用下新建forms.py,编写如下代码:

from django import forms
from django.contrib.auth.models import User
from .models import Patient

class PatientForm(forms.ModelForm):
    # 重写doctor字段,仅保留Docteur用户组的账号作为可选项
    doctor = forms.ModelChoiceField(
        queryset=User.objects.filter(groups__name='Docteur'),
        label="负责医生"
    )

    class Meta:
        model = Patient
        # 可根据需求调整需要展示的字段列表
        fields = ['first_name', 'last_name', 'sex', 'phone', 'birth_date', 'doctor']

后续视图中使用该表单渲染Patient新增/编辑页面即可生效。

方法2:在Django Admin中使用

如果是通过Django后台管理Patient数据,直接修改patient应用的admin.py即可:

from django.contrib import admin
from django.contrib.auth.models import User
from .models import Patient

class PatientAdmin(admin.ModelAdmin):
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "doctor":
            # 过滤doctor选项为Docteur组用户
            kwargs["queryset"] = User.objects.filter(groups__name='Docteur')
        return super().formfield_for_foreignkey(db_field, request, **kwargs)

admin.site.register(Patient, PatientAdmin)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:12:03