2017-06-21 71 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和數據 –

相關問題