访问Django表单中排除的字段';s清洁法

访问Django表单中排除的字段';s清洁法,django,forms,Django,Forms,假设我们有一个Django ORM模型,我们称之为MyModel,它是各自的形式,我们称之为MyForm。另外,让我们想象一下,MyModel中有一个字段被排除在MyForm之外。让我们将此字段称为excluded\u字段。问题是,当我们必须在表单验证期间使用excluded\u字段时,我们如何处理这种情况(意思是表单的clean方法)? 我喜欢按照doc的建议,将用户输入验证和相应的自定义错误消息封装在表单的clean和field\u name\u clean方法中,因为将所有业务逻辑移动到表

假设我们有一个Django ORM模型,我们称之为
MyModel
,它是各自的形式,我们称之为
MyForm
。另外,让我们想象一下,
MyModel
中有一个字段被排除在
MyForm
之外。让我们将此字段称为
excluded\u字段
。问题是,当我们必须在表单验证期间使用
excluded\u字段
时,我们如何处理这种情况(意思是表单的
clean
方法)? 我喜欢按照doc的建议,将用户输入验证和相应的自定义错误消息封装在表单的
clean
field\u name\u clean
方法中,因为将所有业务逻辑移动到表单会使我的视图优雅而简单,并且整个代码都会变得枯燥

具体来说,请考虑下面的代码:

型号:

class MyModel(models.Model):
        # ...some fields
        excluded_field = models.CharField()
        class Meta:
            managed = False
            db_table = 'my_model'
及有关表格:

class MyForm(forms.ModelForm):

   def clean(self):
        # how do I access excluded_field here ?
有人可能会问,为什么我从表单中排除此字段?这是因为这个字段的值是通过编程生成的,用户不知道也不应该知道它的值


因此,问题是,如果我们需要在表单的
clean
方法中访问排除的字段进行用户输入验证,或者在这种情况下,我们必须使用模型实例而不是表单在视图中组织用户输入验证,那么我们可以访问该字段吗?

您已经从中排除了该字段,但它仍然在模型中。您是否尝试通过实例访问它?类似于clean(self)-self.instance.excluded_字段?不排除该字段,只是不显示该字段并在验证之前将其添加到表单中(复制request.POST并以编程方式添加该字段)。或者将其显示为隐藏字段并在后端重写其值,如果不想弄乱模板代码,则可以从中排除该字段,但该字段仍在模型中。您是否尝试通过实例访问它?类似于clean(self)-self.instance.excluded_字段?不排除该字段,只是不显示它并在验证之前将其添加到表单中(复制request.POST并以编程方式添加该字段)。或者,如果不想弄乱模板代码,则将其显示为隐藏字段并在后端重写其值。