class Activitati(models.Model):
data_publicarii = models.DateField(default = "AAAA-LL-ZZ")
titlu = models.TextField(max_length = 50, blank = False)
text = models.TextField(blank = False)
def get_absolute_url(self):
return reverse('activitati', kwargs={'pk':
self.pk})
class Images(models.Model):
post = models.ForeignKey(Activitati, on_delete = models.CASCADE, default = None)
image = models.ImageField(upload_to ='images/', blank = True, null = True)
def __str__ (self):
return self.post.titlu + 'Image'
def activitati_upload(request):
ImageFormset = modelformset_factory(Images, form = ImageForm, extra = 10)
if request.method == 'POST':
activitateform =ActivitatiForm(request.POST)
formset = ImageFormset (request.POST or None, request.FILES or None, queryset = Images.objects.none())
if activitateform.is_valid() and formset.is_valid():
activitate_form = activitateform.save(commit=False)
activitate_form.save()
for form in formset.cleaned_data:
if form:
image = form['image']
photo = Images(post = activitate_form, image = image )
photo.save()
return redirect('activitati')
else:
activitateform = ActivitatiForm()
formset = ImageFormset(queryset = Images.objects.none())
return render(request, 'activitati_upload.html', {
'form':activitateform,
'formset':formset
})
def activitati_list(request):
activitati = Activitati.objects.all()
post = Images.objects.all()
ordering = ['-data_publicarii']
return render(request, 'activitati_list.html', {'activitati':activitati,
'post':post})
class ActivitatiDeleteView(LoginRequiredMixin, DeleteView):
model = Activitati
success_url = '/activitati/list'
TEMPLATE:
{%for p in post.images_set.all%}
<div class="zoom">
<img src="{{image.image.url}}" class=photo>
</div>
{%endfor%}