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
相关产品推荐
相关产品推荐

