2017-06-21 36 views
0

我在我的views.py中有一个视图,在我的forms.py中有一个表单。 我需要将我的视图的列表[]传递给我的表单的MultipleChoiceField。将视图中的列表传递给表单

这是我的代码,我当然想念的东西...

非常感谢

views.py

def view_favorite(request): 
     media = settings.MEDIA 
     game_logo = settings.GAME_LOGO 
     if request.user.is_authenticated(): 
      if request.method == 'POST' : 
       return render(request, 'favorite.html', locals()) 
      else: 
       favs = FavoriteGames.objects.filter(user_id=request.user.id).values_list('game_id', flat=True) 
       list = [] 
       for fav in favs: 
        game = Games.objects.get(id=fav) 
        list.append((game.id, game.guid, game.title, game.logo, "checked"),) 
        nogame = Games.objects.filter(~Q(id__in=favs)).values_list('id', 'guid', 'title', 'logo') 
       form = GamesEditorForm(list) 

forms.py

class GamesEditorForm(forms.Form): 
    def __init__(self, list, *args, **kwargs): 
     super(GamesEditorForm, self).__init__(*args, **kwargs) 

    favorite_games = forms.MultipleChoiceField(
     required=True, 
     initial=True, 
     widget=forms.CheckboxSelectMultiple(), 
     choices=list, 
     ) 
+0

如果我明白你的问题是正确的,你需要一些在你的表单中的初始数据!要创建一个带有初始数据的表单,在你的视图中用form = YourForm(initial = {“form_field”:initial_data})创建你的表单 –

+0

我只是试着传递我的变量list []来提供myMultipleChoiceField。 – GrandGTO

回答

0

你可以传给你数据直接作为功能参数

views.py

from .forms import my_func 

def some_func(request): 
    my_list = [1,2,3] 
    my_func(request, my_list) 

forms.py

def my_func(request, my_list): 
    #Do something with my_list 
0

你可以做的是覆盖默认的init方法为表单,并创建窗体时处理所有的逻辑:

class YourOwnForm(forms.Form): 
    a_field = forms.IntegerField(
     label="field", 
     widget=forms.HiddenInput()) 

    def __init__(self, your_custom_list=None, *args, **kwargs): 
     """ 
     Intantiation service. 
     This method extends the default instantiation service. 
     """ 
     super(CustomizationForm, self).__init__(*args, **kwargs) 
     if your_custom_list: 
      do stuff... 
     else: 
      error... 

你会这样称呼它:

my_form = YourOwnForm(data, your_custom_list=[5,8,9]) 
+0

是的,我试过你的方式,但我想念我想的东西,我把我的代码放在上面,谢谢你的帮助。 – GrandGTO

+0

我认为你需要在'__init__'函数内创建'self.list = list'。并且在调用'super()'之前做这样的分配,因为在表单中的每个字段的初始化之前,你需要自己拥有self.list和数据 –

相关问题