将日期更改为Django中的复选框

时间:2015-08-30 02:13:16

标签: python django date checkbox

我有一个客户表,其中包含ID,姓名,电话和客户设置为非活动状态的日期(称为“inactive_date”)。

在我的表单中,我只想要一个复选框。如果有日期,则设置复选框。如果日期为空,则不设置复选框。

到目前为止,我可以设置复选框的唯一方法是执行以下操作:

class MyCustomerForm(ModelForm):
     inactive_checkbox = forms.BooleanField(initial='checked')

我尝试使用clean或init方法来根据条件设置复选框,但这些尝试下面的尝试都不成功。无论inactive_date的内容是什么,我的表单总是将复选框返回为未设置。

class MyCustomerForm(ModelForm):
     inactive_checkbox = forms.BooleanField()
     def clean(self, *args, **kwargs):
         inactive_date = self.cleaned_data['inactive_date']
         if (inactive_date != None):
             self.fields['inactive_checkbox'] = 'checked'
         return self.cleaned_data

    def __init__(self, *args, **kwargs):
        super(myCustomerForm, self).__init__(*args, **kwargs)

        inactive_date = self.cleaned_data['inactive_date']
        if (inactive_date != None):
             self.fields['inactive_checkbox'] = 'checked'

class Meta:
    model = MyCustomer
    fields = ['customer_id','customer_name','customer_phone',
              'inactive_checkbox']

知道我的代码有什么问题,或者是否有更好的方法通过复选框控制我的inactive_date?

2 个答案:

答案 0 :(得分:0)

尝试初始:

https://docs.djangoproject.com/en/1.8/ref/forms/api/#dynamic-initial-values

在您的视图中检查inactive_date字段的状态,然后通过initial参数将结果传递给表单。

希望它可以提供帮助。

答案 1 :(得分:0)

我想根据jorlugaqui的回答发布我的新表单作为评论,但评论在格式和长度方面非常有限。

所以这是基于jorlugaqui建议的新表格和观点:

新表格:

class MyCustomerForm(ModelForm):
    inactive_checkbox = forms.BooleanField(required=False, label="Inactive")

    class Meta:
        model = MyCustomer
        fields = ['customer_id','customer_name','customer_phone']

新观点:

def customer_detail(request):
    id = request.GET.get('id')
    item = MyCustomer.objects.get(customer_id=id)

    if request.method == 'POST':
        form = MyCustomerForm(request.POST, instance=item, initial={'inactive_checkbox': item.inactive})
        if form.is_valid():
            inactive = request.POST.get('inactive_checkbox')
            modified_item = form.save(commit=False)
            if inactive:
                if modified_item.inactive == None:
                    modified_item.inactive = datetime.datetime.now().strftime("%Y-%m-%d")
            else:
                modified_item.inactive = None
            modified_item.save()
    else:
        form = MyCustomerForm(initial={'inactive_checkbox': item.inactive}, instance=item)
    return render(request, 'basic_detail.html', {'id': id, 'form': form})