在Django中获取表单MultipleChoice的Queryset值

时间:2016-03-23 21:03:17

标签: python django forms

我想在表单中的Queryset中显示多个值,但无法获取值。

我试图使用forms.locations.all并循环播放它们。 forms.locations.1看起来会起作用,但是 forms.locations.1.name forms.locations.1.street也无效。

有没有办法在表单中显示更多的查询集的名称?

我知道这是一个Field。我正在尝试在Admin Dashboard功能中复制一些内容。 我有多个未知数量的选择。并且需要能够将这些选择添加到多个到多个字段中。这已经有效,但只有查询集项的名称显示在表单中,这是一个问题。有些具有相同的名称,依此类推。我需要在管理员内部显示类似字段= ['name','street','street_number','postal_code','city']。

有人有任何想法吗?

forms.py

class GroupCreateForm(forms.ModelForm):

locations = forms.ModelMultipleChoiceField(label='',widget=forms.CheckboxSelectMultiple(attrs={'class': 'styled', "style":"margin:10px;"}), queryset=None)      
group_name = forms.CharField(label='', required=True ,widget=forms.TextInput(attrs={'rows': '1', 'class': 'form-control', 'placeholder': 'Geben Sie den Gruppen Namen an'}))

def __init__(self, user, *args, **kwargs):
    super(GroupCreateForm, self).__init__(*args, **kwargs)
    self.fields['locations'].queryset = LocationData.objects.all().filter(email=user.email)

class Meta: 
    model = GroupManagement
    fields = ['group_name', 'locations']

views.py

  def page_groups(request, page_group):



form = GroupCreateForm(data=request.POST or None, user=request.user)



if request.method == 'POST':
    if form.is_valid():
        group_instance = form.save(commit=False)
        group_name = form.cleaned_data['group_name']
        group_id = group_name.replace(' ', '')
        group_instance.group_id = group_id
        group_instance.email = request.user.email
        group_instance.save()
        form.save_m2m()





context = {

'form': form,

}

return render(request, 'dashboard/create_group.html', context)

views.py

 <div class="col-md-12">


            <div class="panel">

                <div class="panel-body">
                    <div class="tab-content with-panel">

                        <div id="line-blue" class="tab-pane">
                            <div class="row">
                                <div class="col-md-10">
                                    <div class="inputer">
                                        <div class="input-wrapper">
                                            {{form.group_name}}
                                        </div>
                                    </div>
                                </div>
                                <div class="col-md-2">
                                <button type="button" class="btn btn-green btn-flat btn-ripple">Erstellen</button>
                                </div>

                                <div class="col-md-12 locations">


                                        {{form.locations}}

                                </div>



                            </div><!--.row-->
                        </div><!--.tab-pane-->
                    </div>



                    </div><!--.tab-content-->
                </div><!--.panel-body-->


        </div><!--.col-md-6-->

1 个答案:

答案 0 :(得分:0)

经过大量的反复试验后,这是解决方案。

当然,可以通过字段访问查询集,并在管理员中显示多项选择。 尽管另有说明。

您无法在表单标记中使用更多值。因此,解决方案是将表单拆分为更小的部分。 多选形式通常如下所示:

<li>
  <label for="id"><input class="styled" id="id" 
  name="formfield name" type="checkbox" value="1">
  queryset item name
 </label>

值1是Form设置的primaryKey。因此,为了让Django仍然能够理解多对多字段,您需要表单字段名称和主键。

所以现在我的部分卡住了我如何获得这些价值观?

{% for item in form."querysetname".field.queryset.all %} 
<li>
  <input name="formfieldname" type="checkbox"value="{{item.pk}}"> 
    {{item.querysetitem}} {{item.querysetitem}} {{item.querysetitem}} 

</li>

 {% endfor %}

item.pk代表主键。 表单域名称可以复制。

希望有助于以防有人需要多个字段,使用db查询集和表单。