我是 Django 新手,當可供選擇的資料既不是從資料庫中獲取的,也不是用戶在旅途中生成的輸入時,我很難理解表單。
我目前有一個帶有單個ChoiceField. 此欄位中的資料不是固定的,一旦請求頁面,它們就會在旅途中計算。要計算它,我需要登錄用戶的用戶名。基本上,計算回傳一個串列形式的串列((title, id),(title,id),(title,id)),等等。我需要將其放入 ChoiceField 以使用戶從其中一個選項中進行選擇。
現在,我不明白如何將計算出的串列傳遞給表單。我試圖在下面的表格中添加計算,但這顯然是錯誤的方式。
主要問題是,要計算我的串列串列,我需要該request值,但我不知道如何從表單中訪問它。
另一個想法是在generate_selection里面添加函式init但是我不知道如何傳遞main_playlist給能夠將它添加到ChoiceField
下面我不作業forms.py
表格.py
class ChoosePlaylistForm(forms.Form):
playlists = forms.ChoiceField(choices=HERE_SHOULD_GO_main_playlist)
def generate_selection(self):
sp_auth, cache_handler = spotify_oauth2(self.request)
spotify = spotipy.Spotify(oauth_manager=sp_auth)
user_playlists = spotify.current_user_playlists(limit=10)
main_playlist = []
for playlists in user_playlists["items"]:
playlists_list = []
playlists_list.append(playlists['name'])
playlists_list.append(playlists['id'])
main_playlist.append(playlists_list)
return main_playlist
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
super(ChoosePlaylistForm, self).__init__(*args, **kwargs)
class Meta:
model = User
fields = ('playlists',)
視圖應該如下所示,所以我可以通過請求
視圖.py
form = ChoosePlaylistForm(request=request)
uj5u.com熱心網友回復:
Maybe overriding the field choices in the form constructor would work:
class ChoosePlaylistForm(forms.Form):
playlists = forms.ChoiceField(choices=())
class Meta:
model = User
fields = ('playlists',)
def __init__(self, *args, request=None, **kwargs):
super(ChoosePlaylistForm, self).__init__(*args, **kwargs)
self.request = request
self.fields['playlists'].choices = self.generate_selection()
def generate_selection(self):
sp_auth, cache_handler = spotify_oauth2(self.request)
spotify = spotipy.Spotify(oauth_manager=sp_auth)
user_playlists = spotify.current_user_playlists(limit=10)
choices = []
for playlist in user_playlists["items"]:
playlist_choice = (playlist["name"], playlist["id"])
choices.append(playlist_choice)
return choices
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/424352.html
標籤:Python django 形式 django-forms
