[英]Django : Object has no attribute _set'
我在使用django的项目中有以下代码:
def all_songs(request, filter_by):
if not request.user.is_authenticated():
return render(request, 'music/login.html')
else:
try:
song_ids = []
for album in Album.objects.all():
for song in album.song_set.all():
song_ids.append(song.pk)
users_songs = Song.objects.filter(pk__in=song_ids)
for album in GenericAlbum.objects.all():
for song in album.genericsong_set.all():
song_ids.append(song.pk)
generic_songs = GenericSong.objects.filter(pk__in=song_ids)
except Album.DoesNotExist:
users_songs = []
except GenericAlbum.DoesNotExist:
generic_songs = []
return render(request, 'music/songs.html', {
'song_list_all': users_songs,
'generic_song_list': generic_songs,
'filter_by': filter_by,
})
当我进入allSong页面时,出现此错误:
AttributeError:'NoneType'对象没有属性'split'
我认为变量允许None值,但我不知道那个,我尝试了所有并且仍然是同样的问题。
这是回溯:
Traceback (most recent call last):
File "C:\Users\elmou\AppData\Local\Programs\Python\Python36-32\lib\socketserver.py", line 639, in process_request_thread
self.finish_request(request, client_address)
File "C:\Users\elmou\AppData\Local\Programs\Python\Python36-32\lib\socketserver.py", line 361, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "C:\Users\elmou\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\servers\basehttp.py", line 99, in __init__
super(WSGIRequestHandler, self).__init__(*args, **kwargs)
File "C:\Users\elmou\AppData\Local\Programs\Python\Python36-32\lib\socketserver.py", line 696, in __init__
self.handle()
File "C:\Users\elmou\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\servers\basehttp.py", line 179, in handle
handler.run(self.server.get_app())
File "C:\Users\elmou\AppData\Local\Programs\Python\Python36-32\lib\wsgiref\handlers.py", line 144, in run
self.close()
File "C:\Users\elmou\AppData\Local\Programs\Python\Python36-32\lib\wsgiref\simple_server.py", line 35, in close
self.status.split(' ',1)[0], self.bytes_sent
AttributeError: 'NoneType' object has no attribute 'split'
试试看,您尝试从queryset
对象获取pk
,但pk是实例的属性而不是queryset,当您需要queryset的值列表时 ,可以使用values-list ,并将默认值添加到filter_by
def all_songs(request, filter_by=None):
if not request.user.is_authenticated():
return render(request, 'music/login.html')
else:
song_ids = []
for album in Album.objects.all():
song_ids.append(album.song_set.values_list('pk', flat=True))
users_songs = Song.objects.filter(pk__in=song_ids)
song_ids = []
for album in GenericAlbum.objects.all():
song_ids.append(album.genericsong_set.values_list('pk', flat=True))
generic_songs = GenericSong.objects.filter(pk__in=song_ids)
return render(request, 'music/songs.html', {
'song_list_all': users_songs,
'generic_song_list': generic_songs,
'filter_by': filter_by,
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.