如何显示Django中ManyToMany字段中的值而不是其ID?

时间:2019-06-30 08:12:07

标签: python django django-models

我有两个模型

  1. 影响者
class Influencer(models.Model):

    full_name = models.CharField('Full Name',max_length=255)
    username = models.CharField('Username',max_length=255,unique=True)
    photo = models.URLField(blank=True,max_length = 500)
    email_id = models.EmailField('Email Id',blank=True,max_length=500)
    categories = models.ManyToManyField(Category,blank=True,max_length=400)

和 2.类别

class Category(models.Model):
    name = models.CharField(max_length=400)

    def __str__(self):
        return self.name

影响者有很多到很多领域类别。

我显示所有影响者的视图功能是:

def index(request):
    influencers = Influencer.objects.all().order_by('followers')

    paginator = Paginator(influencers,16)
    page = request.GET.get('page')
    paged_listings = paginator.get_page(page)
    user_list = UserList.objects.all().filter(user_id = request.user.id)  
    queryset = list(chain(paged_listings,user_list))
    ser_query = serializers.serialize('json', queryset)
    return HttpResponse(ser_query,content_type='application/json')

HttpResponse包含类别ID而不是类别名称,如下所示: enter image description here

其中category是一个包含类别ID的数组。 我想显示类别的名称,而不是其ID。

我认为可以使用Django Rest Framework嵌套序列化程序来实现,但是目前我不使用DRF。

2 个答案:

答案 0 :(得分:1)

django中有一个natural_key方法将id转换为字符串

在您的models.py文件中添加natural_key方法

class Category(models.Model):
    name = models.CharField(max_length=400,)

    def __str__(self):
        return self.name

    def natural_key(self):
        return self.name

,然后在您的serializers.serializer中通过use_natural_foreign_keys=True,

ser_query = serializers.serialize('json', influencers,indent=2,use_natural_foreign_keys=True,)

答案 1 :(得分:0)

将数组元素-整数值-转换为字符串,然后从包含其ID类别的dict或tuple中访问

id_to_category=["0":"whatever your category is","1":"whatever your category is","2":"whatever your category is","3":"whatever your category is"]

id=str(ur_array[id])

category_name=id_to_category[id]