仅当内容符合特定条件时才将表单保存到数据库

时间:2018-09-21 10:50:19

标签: python django django-forms

我正在寻找一种检查从表单提交的数据是否符合特定条件的方法-不是数据是否有效,而是例如对某个问题的回答是“是”还是“否”,并且仅如果响应为“是”,则应将数据保存到数据库中。如果提交的数据不符合标准,则不应将其保存到数据库中,并应显示一条消息通知用户。

到目前为止,我的代码:

我有一个存储参与者信息的模型:

class Participant(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    date_of_birth = models.DateField()
    has_health_cover = models.CharField(
        choices=(
            ('0','No'),
            ('1','Yes)
        ), 
        default='0', 
        max_length=1
    )
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.PROTECT
    )
    date_registered = models.DateTimeField(default=timezone.now)

使用Modelform创建模型:

class ParticipantRegisterForm(forms.ModelForm):
    class Meta:
        model = Participant
        fields = [
            'first_name',
            'last_name',
            'date_of_birth',
            'has_health_cover',
        ]

使用通用的CreateView对象呈现:

class ParticipantRegisterView(LoginRequiredMixin, CreateView):
    model = Participant
    form_class = ParticipantRegisterForm
    template_name = 'participants/register.html'

    def form_valid(self, form):
        form.instance.provider = self.request.user
        return super().form_valid(form)

我不确定如何获取POST请求数据,确定变量has_health_cover是0(否)还是1(是),以及仅将数据保存到{{1 }}数据库应为Participant

如果has_private_health == 0,则不应保存数据,并且应显示一条简短的消息,并提示用户“参与者不符合资格”。我已经在基本.html模板中设置了Flash消息。

1 个答案:

答案 0 :(得分:0)

您可以在表单中添加自定义clean_<field>方法以检查值并在值无效时引发错误:

function getPublicKey(keyPair: java.security.KeyPair): string {
    const kf = java.security.KeyFactory.getInstance("RSA");
    let pubKeySpec = kf.getKeySpec(keyPair.getPublic(), java.security.spec.X509EncodedKeySpec);
    return pubKeySpec.getEncoded();
}