2010-05-11 88 views
3

我已经在Django中创建了一个具有一些必填字段的详细表单。如果当时没有设置必填字段,我希望将页面另存为Draft选项。我该怎么做?如何将页面保存为草稿

回答

2

如果您保存为草稿,则无需设置的字段的第一组必需= False。然后,在表单中添加一个像“save_as_draft”这样的字段,它是一个布尔值。现在您需要一种方法来验证这些字段,具体取决于save_as_draft字段的状态(无论用户是否选中此字段)。你可以用这样的方法:

def is_provided(self, field): 
     value = self.cleaned_data.get(field, None) 
     if value == None or value == '': 
      self._errors[field] = ErrorList([u'This field is required.']) 
      if field in self.cleaned_data: 
       del self.cleaned_data[field] 

添加这个方法到您的表单,并用它在形式上的清洁方法来验证你的域。这应该是这样的:

def clean(self): 
    draft = self.cleaned_data.get('save_as_draft', False) 
    if not draft: 
     # User doesn't save a draft so we need to check if required fields are provided 
     req_fields = ['field1', 'field2', 'field3'] 
     for f in req_field: 
      self.is_provided(f) 

return self.cleaned_data 

如果用户喜欢save_as_draft按钮,而不是复选框,那么你就需要修改你的看法,并根据用户是否点击save_as_draft按钮或只是保存按钮一些参数传递到您的窗体构造函数。在Form构造器中保存这个状态aa self.save_as_draft,并在Form.clean方法中使用它来检查你是否保存草稿。

问候, 卢卡斯

+2

使用这种方法,你就必须让所有的模型字段为空的,这是不好的 – 2012-10-31 07:55:04