no_new_item
が存在する場合、必須のチェックボックスオプションを作成する必要があります。私はmodel.NullBooleanフィールドを使用しています。 Django docsによると、ブールフィールドはチェックボックスウィジェットをレンダリングするが、NullBooleanはSelectをレンダリングするべきである。 NullBooleanへの切り替えの理由は、マイグレーション時のヌル・エラーによるものです。今、私は「はい」と「いいえ」のドロップダウンリストを取得しています。 NullBooleanを持つモデルmodel.Modelsでチェックボックスを作成するにはどうすればよいでしょうか、それとも良い方法がありますか?ModelBaseを使用したDjango Formsetsチェックボックスはデフォルトではなくドロップダウンリストを表示しません。
は(これは私がDjangoのドキュメントについて話したミスと編集です。おかげで@Alasdair)
/models.py
class StoreNightlyReport(models.Model):
store_number = models.ForeignKey('Stores', verbose_name='Store Number', max_length=20, null=True)
date = models.DateField(null=True)
#managers = models.ManyToManyField('auth.User', blank=True, null=True)
def __str__(self):
return self.store_number.store_number
class StoreNightlyReportsBase(models.Model):
store_nightly_report = models.ForeignKey(StoreNightlyReport)
no_new_item = models.NullBooleanField(verbose_name='No New Items', default=True)
customer = models.CharField(verbose_name='Customer Name', max_length=20, null=True)
class Meta:
abstract = True
/forms.py
class StoreNightlyReportsForm(ModelForm):
class Meta:
model = StoreNightlyReport
widgets = {'date': SelectDateWidget()}
exclude =()
def __init__(self, *args, **kwargs):
user = kwargs.pop('user')
super(StoreNightlyReportsForm, self).__init__(*args, **kwargs)
if 'store_number' in self.fields:
if not user.is_superuser:
self.fields['store_number'].queryset = Stores.objects.filter(managers=user)
/景色.py
class StoresNightlyReportsNewLoansCreate(CreateView):
template_name = 'reports/storenightlyreport_form.html'
model = StoreNightlyReport
form_class = forms.StoreNightlyReportsForm
success_url = reverse_lazy('reports:storenightlyreports')
def get_form(self, form_class=None):
form_class = self.get_form_class()
form = form_class(self.request.POST or None, user=self.request.user)
self.formsets = {}
StoreNightlyReportsNewLoanFormSet = inlineformset_factory(StoreNightlyReport,
StoreNightlyReportsNewLoan,
exclude=[],
extra=1)
self.formsets['new_loan'] = StoreNightlyReportsNewLoanFormSet(self.request.POST or None)
def get_context_data(self, **kwargs):
data = super(StoresNightlyReportsNewLoansCreate, self).get_context_data(**kwargs)
data['formset_new_loan'] = self.formsets['new_loan']
return data
def get_context_data(self, **kwargs):
data = super(StoresNightlyReportsNewLoansCreate, self).get_context_data(**kwargs)
#formset_renewal = StoreNightlyReportsRenewalFormSet()
data['formset_new_loan'] = self.formsets['new_loan']
return super(StoresNightlyReportsNewLoansCreate, self).form_invalid(form)
/tem plate.html
{% extends "reports/base.html" %}
{% load static %}
{% block body_block %}
<div class="container-fluid">
<form class="form-inline" action="" method="post">
{% csrf_token %}
{{ form }}
<table class="table">
{{ formset_new_loan.management_form }}
<div>
<br><h4><strong>New Loans</strong></h4><br>
{% include "reports/formsets.html" with formset=formset_new_loan formset_class_name='new_loan' %}
</div>
</table>
あなたはドキュメントに関する誤っている - [ 'NullBooleanField'](https://docs.djangoproject.com/en/1.11/ref/models/fields/#nullbooleanfield)のデフォルトのウィジェットは' NullBooleanSelect'チェックボックスを使用すると、 'False'と' Null'を区別する方法がありません。 – Alasdair
@Alasdair正解ですが、元の意図であったブール値のフィールドを見ていましたが、マイグレーション中にnullエラーを受け取り、モデルに追加できるようにNullBooleanを選択するようにエラーを提案しました。この場合、NullBooleanでこれを行うにはどうすればよいのですか、またはBooleanがチェックボックスを取得する唯一の方法である場合、nullエラーをクリアするにはどうすればよいですか? –