0

Hello I am new in Django. This is a multiple file upload with data models. This code is working but The data is not displaying on the template. Please find out how to show this multiple uploaded file on template and display those files in the form of table. I have tried so many times. Please give me a solution.

view.py:

def create_to_feed(request):
    user = request.user
    if request.method == 'POST':
        machineform = MachineForm(request.POST)
        form = FeedModelForm(request.POST)
        file_form = FileModelForm(request.POST, request.FILES)
        files = request.FILES.getlist('file') #field name in model
        if form.is_valid() and file_form.is_valid():
            feed_instance = form.save(commit=False)
            feed_instance.user = user
            feed_instance.save()
            for f in files:
                file_instance = FeedFile(file=f, feed=feed_instance)
                file_instance.save()
        return render(request,'usermaster/multipleupload.html',{'machineform':machineform,'form':form,'file_form':file_form,'user':user,'files':files})
    else:
        machineform = MachineForm()
        form = FeedModelForm()
        file_form = FileModelForm
    machine = Machine.objects.all()
    return render(request,'usermaster/multipleupload.html',{'machineform':machineform,'form':form,'file_form':file_form,'user':user,'machine':machine})

urls.py:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('multipleupload/', views.create_to_feed),
]+static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)+static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

models.py:

class Machine(models.Model):
    machine_name = models.CharField(max_length=200)
    operation_no = models.IntegerField()

    def __str__(self):
        return self.machine_name
class Feed(models.Model):
    user=models.ForeignKey(Machine, on_delete=models.CASCADE)
    text=models.IntegerField()

class FeedFile(models.Model):
    file = models.FileField(upload_to="documents/")
    feed = models.ForeignKey(Feed, on_delete=models.CASCADE)

forms.py:

from django import forms
from usermaster.models import Feed, FeedFile, Machine


class MachineForm(forms.ModelForm):  
    class Meta:  
        model = Machine  
        fields = '__all__'



from django.forms import ClearableFileInput
...
class FeedModelForm(forms.ModelForm):
    class Meta:
        model = Feed
        fields = ['text']

class FileModelForm(forms.ModelForm):
    class Meta:
        model = FeedFile
        fields = ['file']
        widgets = {
            'file': ClearableFileInput(attrs={'multiple': True}),
        }

admin.py:

from django.contrib import admin
from .models import Machine
from django.contrib import admin
from .models import Feed,FeedFile
#Register your models here:
admin.site.register(Machine)


class FeedFileInline(admin.TabularInline):
    model = FeedFile


class FeedAdmin(admin.ModelAdmin):
    inlines = [
        FeedFileInline,
    ]

admin.site.register(Feed, FeedAdmin)

multipleupload.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form method="post" action="/multipleupload" enctype="multipart/form-data">
        {% csrf_token %}
        {{machineform}}
        <button type="submit">Save</button>
    </form>
    
</body>
</html>
Manoj Tolagekar
  • 1,816
  • 2
  • 5
  • 22
  • Have a look into **formsets**. https://docs.djangoproject.com/en/4.0/topics/forms/formsets/ – Lewis Jan 05 '22 at 10:43

1 Answers1

0

You can use a for loop in your template HTML. For example:

{% for file in file_form%}
    <a> {{ file.file}} </a>
     {% endfor %}

and you can read this How to upload a file in Django?