出现在的ModelForm可以说我有类似下面的模式:选择哪些字段根据用户
class Patient(models.Model):
#has some fields
doctor = models.ForeignKey(User)
所以患者模型有医生认为对待他。我也有模型形式
class PatientForm(ModelForm):
class Meta:
model=Patient
所以所有的领域都包括在内。让我们说现在frontdesk(nonstaff)可以创建病人,并且必须在他们身上签上一名医生。所以PatientForm的工作原因是医生领域将正常出现。但是医生也可以创建患者,但是当医生(工作人员用户)创建患者时,医生领域必须由关联用户自动填写,而不是在模板中呈现。例如:
if request.user.is_staff():
form = #PatientForm_without_doctor_field
else:
form = PatientForm()
可以使用相同的PatientForm类来完成吗?必须使用不同的ModelForms(一个包含字段,另一个不包含医生)是否更好,并据此使用它?这是最好的方法吗?在构造函数中使用request.user创建新的模型表单会更好吗?
这就是我的想法。也许有一种方法来包括或排除领域像self.exclude('医生') – Apostolos
@Apostolos我认为你可以排除字段只是通过从字段中删除表单init方法,但在这种情况下,你需要覆盖保存方法通过'request.user'到你的模型'医生'字段... – ndpu
所以在构造函数del self.fields ['dotor']里面如果user.is_staff对不对?但后来我必须手动设置patients.doctor = request.user后保存表单与commit = False是否正确? – Apostolos