相关疑难解决方法(0)

Django需要模型形式的字段

我有一个表格,当我不想要它们时,根据需要出现几个字段.这是models.py的表单

class CircuitForm(ModelForm):
    class Meta:
        model = Circuit
        exclude = ('lastPaged',)
    def __init__(self, *args, **kwargs):
        super(CircuitForm, self).__init__(*args, **kwargs)
        self.fields['begin'].widget = widgets.AdminSplitDateTime()
        self.fields['end'].widget = widgets.AdminSplitDateTime()
Run Code Online (Sandbox Code Playgroud)

在实际的Circuit模型中,字段定义如下:

begin = models.DateTimeField('Start Time', null=True, blank=True)
end = models.DateTimeField('Stop Time', null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)

我的views.py就在这里:

def addCircuitForm(request):
    if request.method == 'POST':
        form = CircuitForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/sla/all')
    form = CircuitForm()    
    return render_to_response('sla/add.html', {'form': form})
Run Code Online (Sandbox Code Playgroud)

我该怎么办才能不需要这两个字段?

python forms django model widget

71
推荐指数
3
解决办法
7万
查看次数

将 Django 必填表单字段更改为 False

我正在尝试根据另一个字段的输入将表单字段的 required 更改为“False”。

形式:

class MyNewForm(forms.Form):

def __init__(self, *args, **kwargs):
    self.users = kwargs.pop('users', None)
    super(MyNewForm, self).__init__(*args, **kwargs)


    self.fields['name'] = forms.CharField(
        max_length=60,
        required=True,
        label="Name *:",
        widget=forms.TextInput(
            attrs={'class' : 'form-control', 'placeholder': 'Name'})
    )

def clean_this_other_field(self):

    # change required field
    name = self.fields['name']
    print name.required
    name.required=False
    print name.required
Run Code Online (Sandbox Code Playgroud)

打印结果:

真的

错误的

因此,所需的字段更改为“假”,但当表单页面重新加载时,它会恢复为“真”

有什么建议?

编辑 - 问题解决

对于任何遇到类似问题的人:

def clean_remove(self):
    cleaned_data = super(MyNewForm, self).clean()
    remove = cleaned_data.get('remove', None)
    if remove:
        self.fields['name'].required=False
Run Code Online (Sandbox Code Playgroud)

Remove 是表单中的第一个字段,因此在 remove 字段上添加这个 clean 可以解决问题。

python forms django

4
推荐指数
1
解决办法
8181
查看次数

标签 统计

django ×2

forms ×2

python ×2

model ×1

widget ×1