Django.fun

serializer showing name of model

I want to serialize data from nested queryset: I have working code but output from serializer showing too many data. I want hide this for security reason.

example output: (...) "gallery": "[{"model": "mainapp.imagesforgallery", "pk": 1, "fields": {"user": 1, "image": "uploads/2022/8/6/drw/Adapta-KDE-theme_JOgL4kO.webp", "thumbnail": ""}}]" (...)

this is models.py

class ImagesForGallery(models.Model):
    user = models.ForeignKey(UserProfile, null=True, blank=True, on_delete=models.CASCADE)
    image = models.ImageField(upload_to=user_directory_path, blank=True, null=True)
    thumbnail = models.ImageField(upload_to='uploads/', blank=True, null=True)

    def __str__(self):
        return 'User: {} || Image: {}'.format(self.user, self.image)

class Gallery(models.Model):
    project = models.ForeignKey(Projects, null=True, blank=True, on_delete=models.CASCADE)
    project_gallery =  models.ManyToManyField(ImagesForGallery, blank=True, related_name='project_gallery')

    def __str__(self):
        return '{}'.format(self.project)

This is my view

class HomeView(viewsets.ModelViewSet):
    serializer_class = ProjSerializer
    queryset = Proj.objects.all()

    def list(self, request, *args, **kwargs):
        response = super(HomeView, self).list(request, args, kwargs)
        gal = Gallery.objects.all()
        for d in response.data:
            for g in gal:    
                if d['uuid'] == str(g.project.uuid):
                    qs = g.project_gallery.get_queryset()                
                    serialized_obj = serializers.serialize('json', qs)    
                    d['gallery'] = serialized_obj
                      
        return response

This code compares the project model to the photo gallery model. If uuid is correct, include this gallery in the project and send json.

I'm not sure the code is efficient and safe. The question is how to modify the code so that it does not show the model name.

You need to use your ProjSerializer to serialize your queryset

if d['uuid'] == str(g.project.uuid):
    qs = g.project_gallery.get_queryset()
    serialized_obj = ProjSerializer(qs, many=True).data
    d['gallery'] = serialized_obj

Tutorials

Константы Python: Улучшение управляемости вашего кода

Современный Python: начинаем проект с pyenv и poetry

Настройка проекта Python — виртуальные среды и управление пакетами

Использование requests в Python — тайм-ауты, повторы, хуки

Понимание декораторов в Python

ProcessPoolExecutor в Python: полное руководство

map() против submit() с ProcessPoolExecutor в Python

Понимание атрибутов, словарей и слотов в Python

Полное руководство по slice в Python

Выпуск Django 4.0

Безопасное развертывание приложения Django с помощью Gunicorn, Nginx и HTTPS

Автоматический повтор невыполненных задач Celery

Django REST Framework и Elasticsearch

Докеризация Django с помощью Postgres, Gunicorn и Nginx

Асинхронные задачи с Django и Celery

Релизы безопасности Django: 3.2.4, 3.1.12 и 2.2.24

Выпуски исправлений ошибок Django: 3.2.3, 3.1.11 и 2.2.23

Эффективное использование сериализаторов Django REST Framework

Выпуски безопасности Django: 3.2.2, 3.1.10 и 2.2.22

Выпущенные релизы безопасности Django: 3.2.1, 3.1.9 и 2.2.21

View all tutorials →