0

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

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

非常感谢

视图.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)

表格.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,
        )
4

2 回答 2

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])
于 2017-06-21T16:36:10.960 回答
0

您可以将数据直接作为函数中的参数传递

视图.py

from .forms import my_func

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

表格.py

def my_func(request, my_list):
    #Do something with my_list
于 2017-06-21T16:20:09.700 回答