Как правильно строить модели в django

Я хочу реализовать фотогалерею в моем проекте. в django rest framework я хочу, чтобы вывод был:

[
    {
        "id": 1,
        "owner": {
            "username": "drw",
            "first_name": "",
            "last_name": "",
            "avatar": "http://127.0.0.1:8000/media/default.png",
        },
        "gallery": {
            "id": 4,
            "project_gallery": [
                {
                    "id": 1,
                    "image": "http://127.0.0.1:8000/media/uploads/2022/8/9/drw/616da7a24f6856fab5dac79a_360_IT_Check_-_October_18th_2021_wUvme58.png",
                    "thumbnail": null,
                    "user": 1
                },
                {
                    "id": 2,
                    "image": "http://127.0.0.1:8000/media/uploads/2022/8/9/drw/Adapta-KDE-theme_vdDo0PO.webp",
                    "thumbnail": null,
                    "user": 1
                },
                {
                    "id": 3,
                    "image": "http://127.0.0.1:8000/media/uploads/2022/8/9/drw/Adapta-KDE-theme_ghZHmGF.webp",
                    "thumbnail": null,
                    "user": 1
                }
            ],
            "project_gallery_name": "Testowo"
        },
        "likes": [],
        "category": "ca1",
        "uuid": "30065e4d-3674-4f01-9861-307fe27ede13",
        "project_name": "Testowo",
        "comments": null
    }
]

Я не знаю, хорошо ли я справляюсь с многотомностью.

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 GalleryProject(models.Model):
    project_gallery_name = models.CharField(max_length=20, null=True, blank=True)
    project_gallery = models.ManyToManyField(ImagesForGallery, blank=True, related_name='project_gallery')

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

если я хочу получить результат, как указано выше, то я должен использовать многие ко многим или foreginkey?

Это зависит от того, чего вы хотите добиться. Если каждый экземпляр из ImagesForGallery принадлежит только одному GalleryProject, вы должны использовать models.ForeignKey внутри ImagesForGallery. Но если вы хотите, чтобы каждый экземпляр мог принадлежать более чем одному GalleryProject, вы написали правильно. Читайте о отношениях между моделями в Django

Для достижения такого вывода необходимо создать вложенные сериализаторы.

Вернуться на верх