选择在表单

时间:2017-01-06 19:40:24

标签: python django django-models django-forms

用户可以列出他的财产,他/她将能够编辑该列表。

问题

在编辑时,所有其他字段将显示用户已保存的数据,并且只有amenities字段不会显示“已选择的值”。

amenities字段的所有值都保存在TextField中,用户可以通过“CheckboxSelectMultiple”小部件选择多个项目。

模型

class Motel(models.Model):
    user= models.ForeignKey(User)
    name= models.CharField(max_length=100, verbose_name='Name')
    amenities= models.TextField()

我在表单字段小部件中添加了“已选中”,但它只会检查所有项目。

class MotelForm(forms.ModelForm):
    amenities = forms.MultipleChoiceField(choices=FACILITY_CHOICES, required= False, widget=forms.CheckboxSelectMultiple(attrs={'checked':'checked'}))

浏览

@login_required
def edit_motel_details(request, motel_id, slug):
    if id:
        motel= Motel.objects.get(id=motel_id, slug=slug)
    else:
        motel= motel()
    motel_form= MotelForm(instance=motel)

    MotelImagesInlineFormSet= inlineformset_factory(Motel, MotelImages, fields=('image',))
    formset= MotelImagesInlineFormSet(instance=motel)

    if request.method== "POST":
        motel_form= MotelForm(request.POST, request.FILES)

    if id:
        motel_form= MotelForm(request.POST, request.FILES, instance=motel)

        formset= MotelImagesInlineFormSet(request.POST, request.FILES, instance=motel)

        if motel_form.is_valid():
            created_motel= motel_form.save(commit=False)
            formset=MotelImagesInlineFormSet(request.POST, request.FILES, instance=created_motel)

            if formset.is_valid():
                created_motel.save()
                formset.save()
                redirect_url=reverse('listed')
                return HttpResponseRedirect(redirect_url) 
 return render(request, 'm/m_edit.html', {'motel_form': motel_form,'formset':formset,})

我想在“编辑表单”中显示用户已选择/保存的项目。我错过了什么?

1 个答案:

答案 0 :(得分:0)

Meta MotelForm fields class MotelForm(forms.ModelForm): amenities = forms.MultipleChoiceField(choices=FACILITY_CHOICES, required=False, widget=forms.CheckboxSelectMultiple()) class Meta: model = Motel fields = ['name', 'amenities', ...] 添加{{1}}中的设施。

{{1}}

现在,当您传递实例时,它应该加载已经选择的值。