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。提前致謝。
我認爲這將是有益的http://stackoverflow.com/questions/604266/django-set-default-form-values –
我錯過了什麼嗎?這個答案似乎只是介紹了我已經設定的初始值的概念。這只是複選框的初始值不起作用,如果不是我想要檢查的對象列表,我不知道該給它什麼。 – snorthway
爲什麼不使用django表單爲你設置初始值的工作?那就是我想要的。 –