Как создать набор внешних ключей для каждого файла в списке файлов с помощью django

#python #django #view #model

#python #django #Вид #Модель

Вопрос:

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

 class product(models.Model):
    title = models.CharField('', max_length=100,  db_index=True)
    price = models.CharField('', max_length=100,  db_index=True)
    description = models.CharField('', max_length=100,  db_index=True)

class productimage(models.Model):
    product = models.ForeignKey(product, on_delete=models.CASCADE)
    product_images = models.FileField(blank=True)

if request.method == "POST":
    title = request.POST.get("title")
    price = request.POST.get("price")
    description = request.POST.get("description")
    products = product(title=title,description=description,price=price)
    products.save()
    for image in request.FILES.getlist("images"):
        product_images = image
        products.productimage_set.create(product_images = product_images)
    return render(request,'selling/addproduct.html')
  

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

Ответ №1:

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

Пример:

 ...
for image in request.FILES.getlist("images"):
    productimage.objects.create(product=product, product_images=image)
...
  

а затем получить изображения через product экземпляр:

 product.product_images_set.all()
  

Комментарии:

1. Изображения по-прежнему не добавляются в базу данных

2. Вы обязательно добавили enctype=“multipart/form-data” в свой тег формы?

3. Оказывается, я забыл это добавить. Спасибо!