2017-01-06 40 views
0

用戶將能夠列出他的財產,並且他/她將能夠編輯列表。選擇已編輯表單中的複選框值

的問題

在編輯,所有其他字段將顯示已經保存由用戶和只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,}) 

我想在「編輯」,用來顯示用戶已經選擇/保存項目。我錯過了什麼?

+0

我不明白你的做法。 「TextField」是文本的一個塊,「MultipleChoiceField」是複選框的列表。你怎麼能假設一個複選框列表將被保存到一個文本塊? –

+0

它保存。即使我把它放在CharField中,它仍然會保存。我不想繼續寫一個充滿了100個項目的模型,當我可以用一條線來完成並保存和檢索。它像這樣保存下來[u'Wireless Internet',u'Air Condition',u'Simming Pool',u'Television']。 Django沒有明確說明可以在現場保存的'唯一'數據。 – YoYo

+0

這是我的觀點的一部分。你將選擇保存爲字符串,但沒有django文檔說django足夠聰明,可以將字符串恢復爲複選框列表。 –

回答

0

在你MotelFormMeta添加設施fields

class MotelForm(forms.ModelForm): 
    amenities = forms.MultipleChoiceField(choices=FACILITY_CHOICES, required=False, widget=forms.CheckboxSelectMultiple()) 

    class Meta: 
     model = Motel 
     fields = ['name', 'amenities', ...] 

現在,當您傳遞實例時,它應該加載已選擇的值。

+0

我試過了,但它不能正常工作。還是一樣。 – YoYo

+0

除了通過實例之後的名稱加載之類的設施外,這些字段還有什麼區別? – maverick

+0

是的..除了設施領域,他們都很完美地工作。 – YoYo