在Django表单中预选多个复选框

在Django表单中预选多个复选框,django,django-forms,Django,Django Forms,与非常相似,但我尝试了公认的答案,结果无效。事情是这样的 我有一个用于在照片中标记人物的表单,如下所示: forms.py models.py 我希望用户能够在最初标记照片后编辑照片上的标记,因此我有一个页面,用户可以在其中查看单个照片并编辑其标记。出于显而易见的原因,我希望预先选中已标记的个人复选框。为了做到这一点,我给表单的初始字典提供了一个我想要选择的人的列表,就像我在上面链接的问题的答案一样 views.py 当我在上面的代码中尝试初始化人员时,表单不会显示,但也不会抛出错误。如果我从初

与非常相似,但我尝试了公认的答案,结果无效。事情是这样的

我有一个用于在照片中标记人物的表单,如下所示:

forms.py

models.py

我希望用户能够在最初标记照片后编辑照片上的标记,因此我有一个页面,用户可以在其中查看单个照片并编辑其标记。出于显而易见的原因,我希望预先选中已标记的个人复选框。为了做到这一点,我给表单的初始字典提供了一个我想要选择的人的列表,就像我在上面链接的问题的答案一样

views.py

当我在上面的代码中尝试初始化人员时,表单不会显示,但也不会抛出错误。如果我从初始字典中取出“people”键/值对,则表单显示良好,但没有任何人检查。
如果有必要的话,我也在使用Django 1.5。提前感谢。

您所能做的就是简单地使用django表单为您处理所有这些。请参考这个。理想情况下,它可以归结为让djnago处理表单及其验证和初始值


这实际上是一个很好的习惯,因为你正在剖析你所有的逻辑和你的陈述。这是一个很好的干燥原则。

我想这会有帮助,我是否遗漏了什么?这个答案似乎只是引入了初始值的概念,我已经设定了这个概念。这只是不起作用的复选框的初始值,如果没有要检查的对象列表,我不知道该给它什么。为什么不使用django表单为您设置初始值呢?这正是我想要得到的。Sweet,在表单定义中设置初始值是有效的,尽管我必须向表单传递一个额外的参数。非常感谢。回答了你的问题。请随意投票并接受。
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)
...
class Photo(models.Model):
    user = models.ForeignKey(User)
...

class Person(models.Model):
    user = models.ForeignKey(User)
    photos = models.ManyToManyField(Photo)
...
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)
...