Перебор атрибутов объектов в 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. Вам не нужно будет создавать новую модель для каждой коллекции, вы просто добавите каждый экземпляр коллекции в таблицу коллекции. Тогда ваша фотогалерея будет иметь внешний ключ к коллекции. Я бы, вероятно, пошел еще дальше и разделил ваши изображения на отдельные модели.