gpt4 book ai didi

python - 根据用户选择模型表单中显示哪些字段

转载 作者:太空宇宙 更新时间:2023-11-03 18:38:27 24 4
gpt4 key购买 nike

假设我有一个如下所示的模型:

class Patient(models.Model):
#has some fields
doctor = models.ForeignKey(User)

因此,患者模型有一位治疗他的医生。我还有模型表格

class PatientForm(ModelForm):
class Meta:
model=Patient

因此所有字段都包含在内。假设现在前台(非工作人员)可以创建患者,并且必须为他们指定一名医生。这样PatientForm就可以正常工作,医生字段就会正常显示。但是医生也可以创建患者,但是当医生(工作人员用户)创建患者时,医生字段必须由连接的用户自动填充,而不是在模板中呈现。像这样的东西:

if request.user.is_staff():
form = #PatientForm_without_doctor_field
else:
form = PatientForm()

可以使用相同的 PatientForm 类来完成吗?是否最好使用不同的模型表单(一种包含字段,一种排除医生)并相应地使用它?哪种方法最好?在构造函数中使用 request.user 建立一个新的模型表单是否更好?

最佳答案

request.user传递给 View 中的init:

def some_view(request):
form = PatientForm(user=request.user)

并在表单创建后根据用户在表单初始化中修改表单字段:

from django.contrib.auth.models import AnonymousUser

class PatientForm(ModelForm):
class Meta:
model=Patient

def __init__(self, *args, **kwargs):
user = kwargs.pop('user', AnonymousUser())
super(PatientForm, self).__init__(*args, **kwargs)
if user.is_staff():
# hide field and set doctor to request.user
self.fields['doctor'].widget = forms.HiddenInput()
self.fields['doctor'].initial = user

关于python - 根据用户选择模型表单中显示哪些字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21087631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com