2013-07-23 99 views
3

this question非常相似,但我嘗試了接受的答案,但沒有奏效。這是發生了什麼。在Django表格中預先選擇多個複選框

我有標記的人在照片的形式,看起來像這樣:

forms.py

class TaggingForm(forms.Form): 
    def __init__(self, *args, **kwargs): 
     queryset = kwargs.pop('queryset') 
     super(TaggingForm, self).__init__(*args, **kwargs) 
     self.fields['people'] = forms.ModelMultipleChoiceField(required=False, queryset=queryset, widget=forms.CheckboxSelectMultiple) 
... 

models.py

class Photo(models.Model): 
    user = models.ForeignKey(User) 
... 

class Person(models.Model): 
    user = models.ForeignKey(User) 
    photos = models.ManyToManyField(Photo) 
... 

我希望用戶能夠在他們最初標記照片後在其照片上編輯標籤,因此我有一個他們可以進入的頁面o查看單張照片並編輯其標籤。出於顯而易見的原因,我希望已經預先標記了已加標籤的個人複選框。我試圖通過給表單的初始字典列出我想要的人員列表來做到這一點,就像我在上面鏈接的問題的答案中一樣。

views.py

def photo_detail(request,photo_id): 

    photo = Photo.objects.get(id=photo_id) 

    initial = {'photo_id':photo.id, 'people':[p for p in photo.person_set.all()]} 
    form_queryset = Person.objects.filter(user=request.user) 

    if request.method == "POST": 
     form = TaggingForm(request.POST, queryset=form_queryset) 
     # do stuff 
    else: 
     form = TaggingForm(initial=initial, queryset=form_queryset) 
... 

當我嘗試初始化人民在上面的代碼中,表單顯示不出來,但沒有錯誤或者拋出。如果我從初始字典中取出「人物」鍵/值對,表格顯示正常,但沒有任何人被檢查。 另外我使用的是Django 1.5。提前致謝。

+0

我認爲這將是有益的http://stackoverflow.com/questions/604266/django-set-default-form-values –

+0

我錯過了什麼嗎?這個答案似乎只是介紹了我已經設定的初始值的概念。這只是複選框的初始值不起作用,如果不是我想要檢查的對象列表,我不知道該給它什麼。 – snorthway

+0

爲什麼不使用django表單爲你設置初始值的工作?那就是我想要的。 –

回答

2

你可以做的只是使用django表單來處理所有這些。請參閱question。理想情況下,歸結爲允許djnago處理您的表單及其驗證和初始值。

現在,這實際上是一個很好的習慣,因爲您正在解剖您的所有邏輯和演示文稿。它是一個偉大的DRY原則。

相關問題