Как загрузить несколько изображений для моей модели продукта в Django? - PullRequest
0 голосов
/ 23 октября 2018

Я хочу загрузить несколько изображений продукта, так как я могу это сделать?Версия Django 2.1 и как хранить несколько файлов.Использование python3

Моя модель

class Product(models.Model):
owner = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
name = models.CharField(max_length=33, blank=True)
description = models.TextField()
postdate = models.DateTimeField(auto_now_add=True, blank=False)
duration = models.IntegerField(null=True, blank=True)
image = models.FileField(upload_to=product_directory_path, blank=False, default='default.jpg')

My View

def addProduct(request):
if request.method == 'GET':
    if request.user.is_authenticated:
        return render(request, 'postAd.html')

if request.method == 'POST' and request.FILES.get('image'):
    if request.user.is_authenticated:
        user = User.objects.get(id=request.user.id)
        owner = UserProfile.objects.get(email=user.email)
        image = request.FILES.get('image')
        name = request.POST['name']
        description = request.POST['desc']
        pr = Product(owner=owner, name=name, image=image, description=description, category=category, price=price, ptype=ptype)
        pr.save()
        return HttpResponseRedirect(reverse('ors:dashboard')) 

1 Ответ

0 голосов
/ 23 октября 2018

forms.py

from django import forms

class UploadFileForm(forms.Form):
    file_1 = forms.FileField()
    file_2 = forms.FileField()
    ....
    ....
    file_n = forms.FileField()

добавьте приведенный ниже код в ваш HTML-файл, чтобы получить атрибут файла от forms.py.

 {{ form.file1 }} #for 1st file 
 {{ form.file2 }} #for 2nd file

добавить код ниже в views.py и не нужно проверять аутентификацию пользователя в методе GET (запрос).

def addProduct(request):
    if request.method == 'GET':
        return render(request, 'postAd.html')

    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            file = request.FILES['file1']
            file1 = request.FILES['file2']

            #convert byte code to string 
            file_str = file.read().decode("utf-8")
            file_str1 = file1.read().decode("utf-8")
        return render(request, "postAd.html")

Вы можете изучить этот проект для получения более подробной информации о загрузке.более одного файла. нажмите здесь

...