Как я могу отобразить значения из поля ManyToMany в Django вместо их идентификатора? - PullRequest
1 голос
/ 30 июня 2019

У меня две модели

  1. Influencer
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

Influencer имеет много-много категорий полей.

Функции моих просмотров для отображения всех влияющих факторов:

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 содержит идентификаторы категорий вместо имен категорий, что-то вроде этого: enter image description here

где category - это массив, который содержит идентификаторы категорий. Я хочу отображать названия категорий вместо их идентификаторов.

Я думаю, что этого можно достичь с помощью вложенного сериализатора Django Rest Framework, но в данный момент я не использую DRF.

Ответы [ 2 ]

1 голос
/ 30 июня 2019

в django есть метод natural_key для преобразования идентификатора в строку

добавить метод natural_key в ваш файл models.py

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,)
0 голосов
/ 30 июня 2019

преобразовать значение вашего элемента массива --integer - в строку, а затем получить доступ из dict или кортежа, который содержит категории с их идентификаторами

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]
...