Невозможно сохранить все изображения в форме django - PullRequest
0 голосов
/ 01 февраля 2020

Мне нужно хранить 3 изображения из формы в базу данных. Я вижу, что изображение сохранено, но только 1 не все 3 Я загружаю при сохранении формы.

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

Любая помощь приветствуется!

Спасибо

#models.py
from django.db import models

# Create your models here.
class Post(models.Model):
    # post_img = models.ImageField(upload_to='images/', blank=True, null=True)
    type =  (
                ('machine', "MACHINE"),
                ('accessory', "ACCESSORY")
            )
    post_types = models.CharField(max_length=10, choices=type, default='machine')
    post_title = models.CharField(max_length=100)
    post_desc = models.TextField(max_length=1000)
    name = models.CharField(max_length=50)
    number = models.BigIntegerField()
    altnumber = models.BigIntegerField()
    email = models.EmailField()



    def __str__(self):
        return self.post_title


class Images(models.Model):
    post = models.ForeignKey('Post', on_delete=models.PROTECT)
    image = models.ImageField(upload_to='images/', blank=True, null=True)

    def __str__(self):
        return self.post.post_title + " Image"
        # return self.post_title + " Image"

и

#forms.py
from django import forms
from .models import Post

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = "__all__"

&

#views.py
from django.shortcuts import render, reverse, redirect
from .forms import PostForm
from .models import Post, Images
from django.forms import modelformset_factory


# Create your views here.

def index(request):
    post = Post.objects.all()
    return render(request, 'index.html', {'post': post})


def addpost(request):
    ImageFormset = modelformset_factory(Images, fields=('image', ), extra=3)
    if request.method == 'POST':
        form = PostForm(request.POST)
        formset = ImageFormset(request.POST or None, request.FILES or None)
        print("The initialized : ImageFormset object => %r", ImageFormset)
        print ("----------------------------------------------------------------------------------------------------")
        print("Form entered data => %r", formset)
        if form.is_valid() and formset.is_valid():
            post = form.save(commit=False)
            post.save()

            for f in formset:
                try:

                    photo = Images(post=post, image=f.cleaned_data['image'])
                    print ("1----------------------------------------------------------------------------------------------------")
                    print("photos %r =>", photo)
                    print ("----------------------------------------------------------------------------------------------------")
                    print("imageformset %r => ", ImageFormset)
                    photo.save()
                    return redirect(reverse('index:index'))
                except Exception as e:
                    break

    else:
        form = PostForm()
        formset = ImageFormset(queryset=Images.objects.none())
    context = {
        'form': form,
        'formset': formset,
    }
    return render(request, 'addpost.html', context)

и вот html file

{% extends 'base.html' %}

{% block title %} Machine Suchers | Home {% endblock %}
{% block content %}

<div class="container">
    <h1 class="text-center mt-5 mb-5">Add post Details</h1>
    <div class="row justify-content-center">
        <div class="col-md-6">
           <form enctype="multipart/form-data" action="/add_post/" method="post">
               {% csrf_token %}
               {{ formset.as_p }}
               {{ form.as_p }}
                <input type="submit" value="Save" class="btb btn-outline-primary">
            </form>
        </div>
    </div>
</div>
{% endblock %}

Я запустил код и вижу сообщения журнала. Я не уверен, правильно ли я зарегистрировал сообщения журнала для объекта изображения.

журнал сообщений при выполнении кода с тремя изображениями

...