Django布尔复选框输入字段打印值='假'

时间:2021-05-25 02:06:47

标签: django checkbox django-forms boolean bootstrap-modal

我在一个表单中有许多布尔字段复选框输入,我注意到以下布尔字段(avaialble、bfbw、asp 和 tours) 正在打印默认值 'False' 而布尔字段的其余部分 (para_athlete, working_with_children) 没有。

当 False 的值存在时,我无法在开/关(真/假)之间切换复选框

是否有一些明显的东西被我遗漏了,因为我正在努力寻找字段之间的任何差异?

在此先感谢您为我提供的任何帮助。

下面是代码。

模型

athlete_ref = models.CharField(max_length=10, default=1)
athlete_name = models.CharField(max_length=80)
email = models.EmailField()
phone_number = models.CharField(max_length=120)
home = models.CharField(max_length=120)
education = models.CharField(max_length=120)
sport = models.CharField(max_length=120, choices=sports, default='Shooting')
notes = models.TextField()
gender = models.CharField(max_length=120, choices=genders, default='Not Specified')
para_athlete = models.BooleanField(blank=True)
working_with_children = models.BooleanField(blank=True)
expiry_date = models.DateField(blank=True, null=True)
available = models.BooleanField(blank=True)
available_from = models.DateField(blank=True, null=True)
bfbw = models.BooleanField(blank=True)
latest_bfbw_session = models.DateField(blank=True, null=True)
number_bfbw_sessions = models.CharField(blank=True, null=True, max_length=10)
asp = models.BooleanField(blank=True)
latest_asp_session = models.DateField(blank=True, null=True)
number_asp_sessions = models.CharField(blank=True, null=True, max_length=10)
tours = models.BooleanField(blank=True)
latest_tours_session = models.DateField(blank=True, null=True)
number_tours_sessions = models.CharField(blank=True, null=True, max_length=10)

表格

class EditAthleteForm(forms.ModelForm):

class Meta():
    model = Athlete
    fields = ('__all__')

    widgets = {
        'athlete_ref': TextInput(attrs={'id':'athlete_ref', 'name': 'athlete_ref', 'hidden': 'hidden'}),
        'athlete_name': TextInput(attrs={'class': 'form-control', 'id': 'edit_athlete_name', 'name': 'edit_athlete_name', 'placeholder': 'John Doe'}),
        'email': TextInput(attrs={'class': 'form-control', 'id': 'edit_athlete_email', 'name': 'edit_athlete_email', 'placeholder': 'name@example.com'}),
        'phone_number': TextInput(attrs={'class': 'form-control', 'id': 'edit_athlete_phone_number', 'name': 'edit_athlete_phone_number', 'placeholder': '0400 000 000', 'pattern': '^((\+61\s?)?(\((0|02|03|04|07|08)\))?)?\s?\d{1,4}\s?\d{1,4}\s?\d{0,4}$'}),
        'home': TextInput(attrs={'class': 'form-control', 'id': 'edit_athlete_home', 'name': 'edit_athlete_home', 'placeholder': 'Home Address'}),
        'education': TextInput(attrs={'class': 'form-control', 'id': 'edit_athlete_education', 'name': 'edit_athlete_education', 'placeholder': 'Education'}),
        'sport': Select(attrs={'class': 'form-select', 'id': 'edit_athlete_sports', 'name': 'edit_athlete_sports'}),
        'notes': Textarea(attrs={'class': 'form-control', 'id': 'edit_athlete_notes', 'name': 'edit_athlete_notes'}),
        'gender': Select(attrs={'class': 'form-select', 'id': 'edit_athlete_gender', 'name': 'edit_athlete_gender'}),
        'para_athlete': CheckboxInput(attrs={'class': 'form-check-input', 'id': 'edit_athlete_para_athlete', 'name': 'edit_athlete_para_athlete'}),
        'working_with_children': CheckboxInput(attrs={'class': 'form-check-input', 'id': 'edit_athlete_wwc_input', 'name': 'edit_athlete_wwc_input'}),
        'expiry_date': DateInput(attrs={'type': 'date','class': 'form-control', 'id': 'edit_athlete_expiry_datepicker', 'name': 'edit_athlete_expiry_datepicker'}),
        'available': CheckboxInput(attrs={'class': 'form-check-input', 'id': 'edit_athlete_available_input', 'name': 'edit_athlete_available_input'}),
        'available_from': DateInput(attrs={'type': 'date','class': 'form-control', 'id': 'edit_athlete_datepicker', 'name': 'edit_athlete_datepicker'}),
        'bfbw': CheckboxInput(attrs={'class': 'form-check-input', 'id': 'edit_athlete_bfbw_input', 'name': 'edit_athlete_bfbw_input'}),
        'latest_bfbw_session': DateInput(attrs={'type': 'date','class': 'form-control', 'id': 'edit_athlete_bfbw_datepicker', 'name': 'edit_athlete_bfbw_datepicker'}),
        'number_bfbw_sessions': TextInput(attrs={'class': 'form-control', 'id': 'edit_athlete_bfbw_number_input', 'name': 'edit_athlete_bfbw_number_input'}),
        'asp': CheckboxInput(attrs={'class': 'form-check-input', 'id': 'edit_athlete_asp_input', 'name': 'edit_athlete_asp_input'}),
        'latest_asp_session': DateInput(attrs={'type': 'date','class': 'form-control', 'id': 'edit_athlete_asp_datepicker', 'name': 'edit_athlete_asp_datepicker'}),
        'number_asp_sessions': TextInput(attrs={'class': 'form-control', 'id': 'edit_athlete_asp_number_input', 'name': 'edit_athlete_asp_number_input'}),
        'tours': CheckboxInput(attrs={'class': 'form-check-input', 'id': 'edit_athlete_tour_input', 'name': 'edit_athlete_tour_input'}),
        'latest_tours_session': DateInput(attrs={'type': 'date','class': 'form-control', 'id': 'edit_athlete_tour_datepicker', 'name': 'edit_athlete_tour_datepicker'}),
        'number_tours_sessions': TextInput(attrs={'class': 'form-control', 'id': 'edit_athlete_tour_number_input', 'name': 'edit_athlete_tour_number_input'}),

查看

def update_athlete(request):
    if request.method == 'POST':
        athlete_ref_id = request.POST.get('athlete_ref')
        ath_data = Athlete.objects.get(id=athlete_ref_id)
        ath_data.athlete_name = request.POST['athlete_name']
        ath_data.email = request.POST['email']
        ath_data.home = request.POST['home']
        ath_data.education = request.POST['education']
        ath_data.sport = request.POST['sport']
        ath_data.notes = request.POST['notes']
        ath_data.gender = request.POST['gender']
        ath_data.para_athlete = request.POST.get('para_athlete') == 'on'
        ath_data.working_with_children = request.POST.get('working_with_children') == 'on'
        ath_data.expiry_date = request.POST.get('expiry_date')
        ath_data.available = request.POST.get('available') == 'on'
        ath_data.available_from = request.POST.get('available_from')
        ath_data.bfbw = request.POST.get('bfbw') == 'on'
        ath_data.latest_bfbw_session = request.POST.get('latest_bfbw_session')
        ath_data.number_bfbw_sessions = request.POST.get('number_bfbw_sessions')
        ath_data.asp = request.POST.get('asp') == 'on'
        ath_data.latest_asp_session = request.POST.get('latest_asp_session')
        ath_data.number_asp_sessions = request.POST.get('number_asp_sessions')
        ath_data.tours = request.POST.get('tours') == 'on'
        ath_data.latest_tours_session = request.POST.get('latest_tours_session')
        ath_data.number_tours_sessions = request.POST.get('number_tours_sessions')
        ath_data.save()
        print(ath_data.available)
    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))

HTML

<!-- EDIT Athlete Modal -->
<form method="post" action="update_athlete/" id="edit_athlete_form">
    {% csrf_token %}
    {{ form.non_field_errors }}

    {{ form.source.errors }}
    {{ form.source }}
  <div class="modal fade" id="edit_athlete_modal" tabindex="-1" aria-hidden="true">
    <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
      <div class="modal-content">
        <div class="modal-header card-header">
          <h5 class="modal-title"><i class="fa fa-pencil mx-1"></i> Edit Athlete Details</h5>
          <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Close"></button>
        </div>
        <div class="modal-body">
          <div class="card text-dark bg-light mb-3">
            <div class="card-body">
              <div class="form-floating mb-3">
                {{edit_ath_form.athlete_name}}
                <label for="edit_name">Name & Last Name</label>
              </div>
              <div class="form-floating mb-3">
                {{edit_ath_form.email}}
                <label for="edit_email">Email address</label>
              </div>
              <div class="form-floating mb-3">
                {{edit_ath_form.phone_number}}
                <label for="edit_athlete_phone_number">Phone number</label>
              </div>
              <div class="form-floating mb-3">
                {{edit_ath_form.home}}
                <label for="edit_home">Home</label>
              </div>
              <div class="form-floating mb-3">
                {{edit_ath_form.education}}
                <label for="edit_education">Education</label>
              </div>
              <div class="form-floating mb-3">
                {{edit_ath_form.sport}}
                <label for="edit_sports">Sports</label>
              </div>
              <div class="form-floating mb-3">
                {{edit_ath_form.notes}}
                <label for="edit_notes">Notes</label>
              </div>
              <div class="form-floating mb-3">
                {{edit_ath_form.gender}}
                <label for="edit_gender">Gender</label>
              </div>
              <div class="form-check form-switch">
                {{edit_ath_form.para_athlete}}
                <label class="form-check-label" for="edit_athlete_para_athlete">Para athlete</label>
              </div>
            </div>
          </div>
          <div class="card text-dark bg-light mb-3">
            <div class="card-body">
              <div class="form-check form-switch">
                {{edit_ath_form.working_with_children}}
                <label class="form-check-label" for="edit_athlete_wwc_input">Has WWC</label>
              </div>
              <div class="form-floating mb-3">
                {{edit_ath_form.expiry_date}}
                <label for="edit_athlete_expiry_datepicker">Expires on</label>
              </div>
              <div class="form-check form-switch">
                {{edit_ath_form.available}}
                <label class="form-check-label" for="edit_athlete_available_input">Available</label>
              </div>
              <div class="form-floating mb-3">
                {{edit_ath_form.available_from}}
                <label for="edit_athlete_datepicker">Available from</label>
              </div>
              <div class="form-check form-switch">
                {{edit_ath_form.bfbw}}
                <label class="form-check-label" for="edit_athlete_bfbw_input">BFBW</label>
              </div>
              <div class="row">
                <div class="col-6">
                  <div class="form-floating mb-3">
                    {{edit_ath_form.latest_bfbw_session}}
                    <label for="edit_athlete_bfbw_datepicker">Latest BFBW Session</label>
                  </div>
                </div>
                <div class="col-6">
                  <div class="form-floating mb-3">
                    {{edit_ath_form.number_bfbw_sessions}}
                    <label for="edit_athlete_bfbw_number_input">Number of BFBW Sessions</label>
                  </div>
                </div>
              </div>
              <div class="form-check form-switch">
                {{edit_ath_form.asp}}
                <label class="form-check-label" for="edit_athlete_asp_input">ASP</label>
              </div>
              <div class="row">
                <div class="col-6">
                  <div class="form-floating mb-3">
                    {{edit_ath_form.latest_asp_session}}
                    <label for="edit_athlete_asp_datepicker">Latest ASP Session</label>
                  </div>
                </div>
                <div class="col-6">
                  <div class="form-floating mb-3">
                    {{edit_ath_form.number_asp_sessions}}
                    <label for="edit_athlete_asp_number_input">Number of ASP Sessions</label>
                  </div>
                </div>
              </div>
              <div class="form-check form-switch">
                {{edit_ath_form.tours}}
                <label class="form-check-label" for="edit_athlete_tour_input">VIS Tours</label>
              </div>
              <div class="row">
                <div class="col-6">
                  <div class="form-floating">
                    {{edit_ath_form.latest_tours_session}}
                    <label for="edit_athlete_tour_datepicker">Latest VIS Tour</label>
                  </div>
                </div>
                <div class="col-6">
                  <div class="form-floating mb-3">
                    {{edit_ath_form.number_tours_sessions}}
                    <label for="edit_athlete_tour_number_input">Number of Tours</label>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
         {{edit_ath_form.athlete_ref}}
        <div class="modal-footer">
          <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
          <button type="submit" class="btn btn-primary" name="save_edit_athlete">Save Changes</button>
        </div>
      </div>
    </div>
  </div>
</form>
<!-- END EDIT Athlete Modal -->

enter image description here

1 个答案:

答案 0 :(得分:0)

已修复 - JavaScript 添加错误值时存在问题。