【问题标题】:Django Model Boolean Field needs to be initially unchecked. initial=False required=False is not working最初需要取消选中 Django 模型布尔字段。初始=假需要=假不工作
【发布时间】:2017-06-14 16:48:17
【问题描述】:

Forms.py

class CheckPostedForm(forms.ModelForm):
        posted = forms.BooleanField(required=False, initial=False)

Views.py

       postform = CheckPostedForm(request.POST, instance=author)
       if postform.is_valid():
            postform.save()
       else:
            print 'Cannot save post form.'

Models.py

posted = models.CharField(max_length=2, blank=True, null=True)
class Meta:
    model = TmpPlInvoice
    exclude = ['net_amt', 'post_date', 'address', 'particulars', 'pos_code', 'acct', 'cust', 'voucher_id', 'voucher_date', 'post_date']
    labels = {
        'posted': 'Posted',
    }

我想要一个最初未选中的复选框,并且基于数据库中的值我选中/取消选中它。无论我做什么,表格总是以checked="checked"的形式出现。

print postform 给出了这个,

<tr><th><label for="id_posted">Posted:</label></th><td><input checked="checked" id="id_posted" name="posted" type="checkbox" value="n" required /></td></tr>

我已经搜索了很多地方,文档说如果我们要应用条件,它最初应该是 false required=False。

详情 Views.py

def master_detail_posted(request):
    if request.method == 'GET':
        author = TmpPlInvoice.objects.get(id=1)
        postform = CheckPostedForm(instance=author)
        return render(request,'main.html' ,{'postform': postform})
    if request.method == 'POST':
        author = TmpPlInvoice.objects.get(id=1)
        postform = CheckPostedForm(request.POST, instance=author)
        print postform
        if postform.is_valid():
            logger.info('saving post form %s', postform.cleaned_data)
            postform.save()
        else:
            logger.info('post form is not valid %s %s', postform.errors, request.POST)
        return render(request,'main.html' ,{'postform': postform})

模板

<div> {{ postform }} </div>

【问题讨论】:

  • 用wiget怎么样..posted = forms.BooleanField(required=False, widget=forms.CheckboxInput())
  • 不管怎样,你的class Meta: &lt;enter&gt; model = ModelNameCheckPostedForm里面呢?
  • @SancaKembang 结果还是一样。
  • 请更新您的完整代码...
  • @SancaKembang 请查看。

标签: html django django-models django-forms


【解决方案1】:

您已经在模板中对字段进行了硬编码。显然,Django 无法更改您明确编写的 HTML 标记。

您需要在模板中使用 Django 标签:

<td>{{ form.posted }}</td>

【讨论】:

  • 为了清楚起见,我已经粘贴了 html。这是 Django 动态生成的。我在模板中使用 Django 标签。
  • 然后你需要展示你的实际模板,以及full视图。
  • 您的表单和模型都混在一起了(例如,您在模型上发布的 Meta 看起来实际上来自表单)。请发布两者的实际完整定义 - 以及视图的其余部分,例如显示 author 的来源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 1970-01-01
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多