django - 在没有html文件的django中显示列表
问题描述
我有 2 个模型,但我想在输出中显示艺术家的名字
class Musician(models.Model):
name = models.CharField(max_length=50)
instrument = models.CharField(max_length=100)
class Album(models.Model):
name = models.CharField(max_length=100)
artist = models.ForeignKey(Musician, on_delete=models.CASCADE)
num_stars = models.IntegerField()
我想通过 HttpResponce 函数显示艺术家姓名
class Musician_list(View):
def get(self, request):
persons = Album.objects.all().values_list("artist__name").order_by("artist__name")
return HttpResponse(persons)
但是这段代码没有显示任何东西,请帮助我。
解决方案
您应该 JSON 将其序列化为列表。此外,外部项目应该是字典,因为事实证明使用列表作为外部项目可能是不安全的 [haacked.com]:
from django.http import JsonResponse
class Musician_list(View):
def get(self, request):
persons = list(
Album.objects.values_list('artist__name', flat=True).order_by('artist__name')
)
# ↓ use a JsonResponse
return JsonResponse({'data': persons})
# use a dictionary as outer item ↑
话虽如此,通常最好使用Django 的序列化框架[Django-doc],或者对于 REST 框架,使用Django 的 REST 框架 [drf-doc]。