Javascript 在Django CharFields交互中应用条件

Javascript 在Django CharFields交互中应用条件,javascript,python,html,django,Javascript,Python,Html,Django,在我的Django的model.py中,我有以下条目: class Method1(models.Model): clustering_method_param = models.CharField(max_length=20, default='ward', blank=True, choices=( ('complete', 'Complete linkage'), ('average','Average linkage'

在我的Django的model.py中,我有以下条目:

class Method1(models.Model):
    clustering_method_param     = models.CharField(max_length=20,
         default='ward', blank=True, choices=(
         ('complete', 'Complete linkage'),
         ('average','Average linkage'),
         ('ward','Ward'),))

    distance_method_param     = models.CharField(max_length=20, blank=True,
            default='euclidean', choices=(
           ('euclidean', 'Euclidean'),
          ('manhattan','Manhattan'),
          ('pearsond','Pearson Correlation'),))
之后在HTML中呈现为:

我想做的是设置条件。也就是说,聚类方法
ward
只能应用于距离度量
欧几里德
。如果用户将所有其他距离测量值传递到
病房
,则应返回错误消息。我如何在Django中应用它?还是应该改用JavaScript

以下是HTML代码的示例:


聚类方法
完全联动
平均连杆
病房
距离测量
欧几里得
曼哈顿
皮尔逊相关系数

使用JavaScript和Ajax是解决问题的行之有效的方法。您可以在第一个下拉列表中收听用户选择,然后根据ajax的响应相应地显示第二个下拉列表。

对于“用户体验”,我认为您需要编写javascript来根据所选的聚类方法参数更改所有距离

但是,如果你只是想在django上“阻止”这个。 您可以编写表单验证,如下所示:

def clean(self):
    cleaned_data = self.cleaned_data
    clustering_method_param = cleaned_data.get('clustering_method_param', None)
    distance_method_param = cleaned_data.get('distance_method_param', None)

    if clustering_method_param == 'ward':
        if distance_method_param != 'euclidean':
            self.errors.update(
                {
                    'distance_method_param': [u'It should be euclidean.']
                }
            )
    return cleaned_data

你能举一个JavaScript的例子吗?我已经上传了HTML代码。谢谢。但我看不出有什么效果。我更新了我的Django。我使用
classmethod1(models.Model):
如果我们想使用JavaScript,我该怎么做?您需要将其添加到表单类中。本教程可以帮助您使用ajax。你的意思是把clean()放在forms.py中?它很有效!!在我输入forms.py之后,但是在消息中垂直显示字母!!!!如何纠正这一点?