首页 > 解决方案 > 在没有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)

但是这段代码没有显示任何东西,请帮助我。

标签: djangodjango-viewsdjango-templates

解决方案


您应该 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]


推荐阅读