2017-07-25 60 views
2

我为模型创建了一个表单,现在我想为该模型创建一个更新表单,但是我在CheckboxSelectMultiple字段中遇到了问题。这里是我的代码:如何将选中的复选框保存在Django的编辑表单的CheckboxSelectMultiple字段中

choices.py

FREQUENCY_CHOICES = (('sunday', 'Sunday'), ('monday', 'Monday'), ('tuesday', 'Tuesday'), ('wednesday', 'Wednesday'), ('thursday', 'Thursday'), ('friday', 'Friday'), ('saturday', 'Saturday')) 

models.py

class Schedules(models.Model): 
    course_name = models.ForeignKey(Course) 
    location = models.CharField(max_length=128, choices=LOCATION_CHOICES, default='south_plainfield') 
    room = models.CharField(max_length=128, choices=ROOM_CHOICES, default='A') 
    start_date = models.DateField(auto_now=False, auto_now_add=False, default=datetime.date.today) 
    start_time = models.CharField(max_length=128, choices=START_TIME_CHOICES, default='eight-thirty am') 
    end_time = models.CharField(max_length=128, choices=END_TIME_CHOICES, default='eight-thirty am') 
    instructor = models.ForeignKey(Instructor) 
    total_hours = models.CharField(max_length=128, choices=TOTAL_HOURS_CHOICES, default='six') 
    # Relevant code here 
    frequency = models.CharField(max_length=128) 
    status = models.CharField(max_length=128, choices=STATUS_CHOICES) 
    interval = models.CharField(max_length=128, choices=INTERVAL_CHOICES, default='1 day') 
    initiated_by = models.CharField(max_length=128, null=True) 
    schedule_id = models.IntegerField(default=0) 

forms.py

class ScheduleForm(forms.ModelForm): 
    course_name = CourseChoiceField(queryset=Course.objects.filter(status=True), label="Course Name", widget=forms.Select(attrs={'class': 'form-control'})) 
    location = forms.ChoiceField(choices=LOCATION_CHOICES, initial='south_plainfield', label="Location", widget=forms.Select(attrs={'class': 'form-control'})) 
    room = forms.ChoiceField(choices=ROOM_CHOICES, initial='A', label="Room", widget=forms.Select(attrs={'class': 'form-control'})) 
    start_date = forms.DateField(input_formats=['%m/%d/%Y'], label="Start Date", widget=DateInput(format='%m/%d/%Y'), help_text="MM/DD/YYYY") 
    start_time = forms.ChoiceField(choices=START_TIME_CHOICES, initial='eight-thirty am', label="Start Time", widget=forms.Select(attrs={'class': 'form-control'})) 
    interval = forms.ChoiceField(choices=INTERVAL_CHOICES, initial='1 day', label="Interval", widget=forms.Select(attrs={'class': 'form-control'})) 
    # hours_per_class = forms.ChoiceField(choices=HOURS_PER_CLASS_CHOICES, initial='four_and_half', label="Hours Per Class", widget=forms.Select(attrs={'class': 'form-control'})) 
    total_hours = forms.ChoiceField(choices=TOTAL_HOURS_CHOICES, initial='six', label="Total Hours", widget=forms.Select(attrs={'class': 'form-control'})) 
    instructor = InstructorChoiceField(queryset=Instructor.objects.all(), label="Instructor", widget=forms.Select(attrs={'class': 'form-control'})) 
    end_time = forms.ChoiceField(choices=END_TIME_CHOICES, initial='eight-thirty am', label="End Time", widget=forms.Select(attrs={'class': 'form-control'})) 
    # Relevant code here 
    frequency = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=FREQUENCY_CHOICES, label="Frequency", help_text="Please select at least one") 
    status = forms.ChoiceField(widget=forms.RadioSelect, choices=STATUS_CHOICES, label="Status") 

    class Meta: 
     model = Schedules 
     fields = ('course_name', 'instructor', 'location', 'room', 'start_date', 'start_time', 'end_time', 'interval', 'total_hours', 'frequency', 'status',) 

views.py

def update_Schedule(request, pk): 
    schedule = get_object_or_404(Schedules, pk=pk) 
    form = ScheduleForm(request.POST or None, instance=schedule) 
    if form.is_valid(): 
     form.save() 
     return redirect('schedule_list') 
    return render(request, "schedule/update_schedule.html", {'form':form}) 

update_schedule.html

{% block main_content %} 
<style> 
    ul { 
     list-style: none; 
    } 
</style> 
<h2>Update Course Schedule</h2> 
<br> 
<form id="update_schedule_form" method="post" action=""> 
    {% csrf_token %} 
    <div class="row"> 
     {% for field in form %} 
      <div class="col-gl-4 col-md-4"> 
       <div class="form-group"> 
        <strong>{{ field.errors }}</strong> 
        {{ field.label_tag }} 
        {{ field.help_text }} 
        <br> 
        {{ field }} 
        <script></script> 
       </div> 
      </div> 
     {% endfor %} 
    </div> 
    <button type="submit" name="submit">Update Schedule</button> 
</form> 
{% endblock %} 

出于某种原因,在变频领域检查的选择不留去的时候到更新的形式为实例,即使其余字段做检查。我知道这是唯一接受多种选择的领域。奇怪的是,我制作的表格将频率作为数组返回。我知道这已经被问过,但没有得到答案,所以我希望有人能够帮助我解决这个难题。谢谢。

回答

0

我找到了答案。显然我应该将模型中的字段改为MultiSelectField。

相关问题