Перебор атрибутов объектов в Django

Я не уверен, как правильно сформулировать вопрос, но у меня есть модель для фотогалереи:

class PhotoGallery(models.Model):
    title = models.CharField(max_length=200, unique=True)
    collection = models.CharField(max_length=200)
    img = models.FileField(upload_to =f'pics/gallery/{collection}')
    created_on = models.DateTimeField(auto_now_add=True)

и я пытаюсь найти способ получать изображения отдельно из каждой коллекции - views.py:

def photo_gallery(request):
    form = GalleryForm(request.POST)
    if request.method == "POST":
        if form.is_valid():
            images = request.FILES.getlist('images')
            collection = form.cleaned_data['collection']
            title = form.cleaned_data['title']
            for image in images:
                PhotoGallery.objects.create(img=image, collection=collection, title=title)
    images = PhotoGallery.objects.all()
    
    #not what i think it is - just hoping it could make what i want to do clearer
    context = [collection.img for collection in images]
    return render(request, 'photos/photos.html', context)

Я не смог найти много информации в документации или где-либо в Интернете об этом. Я думаю, что решением будет иметь отдельную модель для каждой коллекции, но даже тогда я столкнусь с проблемами, если захочу добавить новую коллекцию.

Итак, любые предложения о том, как я могу это сделать, будут приняты с благодарностью. Возможно, есть метод объекта, в котором я мог бы сделать PhotoGallery.objects.something()

Думаю, вы ищете filter.

galleries_with_selected_collection = PhotoGallery.objects.filter(collection=selected_collection)

# context must be a dict, not a list
context = {
    'galleries': galleries_with_selected_collection
}

Вы извлекаете объекты PhotoGallery, а не изображения или коллекции. Это атрибуты вашей PhotoGallery. Поэтому вам нужно взять фотогалереи с выбранной коллекцией, а затем взять их атрибут изображения.

И уточнение по поводу создания модели для каждой коллекции:

Вы можете разделить ваши коллекции в модели Collection. Вам не нужно будет создавать новую модель для каждой коллекции, вы просто добавите каждый экземпляр коллекции в таблицу коллекции. Тогда ваша фотогалерея будет иметь внешний ключ к коллекции. Я бы, вероятно, пошел еще дальше и разделил ваши изображения на отдельные модели.

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