Как сохранить модель django с несколькими изображениями?
Уже час бьюсь, но видимо чего-то не понимаю. Есть задача написать скрапер с админпанелью django и тут все хорошо и работает. Теперь мне нужно сохранить все данные в базу данных и вот тут проблема, в админ панели django появляется только одна фотография, но все загружается в папку media.
# models.py
from django.db import models
class Apartment(models.Model):
rooms = models.CharField('кол-во комнат', max_length=64)
price = models.CharField('цена', max_length=10)
address = models.CharField('Адрес', max_length=256)
desc = models.TextField('описание')
floor = models.CharField('этаж', max_length=5)
def __str__(self):
return self.address
class Meta:
verbose_name = 'квартира'
verbose_name_plural = 'квартиры'
class Image(models.Model):
apartment = models.ForeignKey(Apartment, on_delete=models.CASCADE)
img = models.ImageField(upload_to='media/')
class Meta:
verbose_name = 'фото'
verbose_name_plural = 'фото'
class Url(models.Model):
created = models.DateTimeField(auto_now_add=True)
url = models.URLField('ссылка')
def __str__(self):
return self.url
class Meta:
verbose_name = 'ссылка'
verbose_name_plural = 'ссылки'
ordering = ['-created']
#save function
def save_data(apartments_list):
for ap in apartments_list:
im = Image()
try:
apartment = Apartment.objects.create(
rooms=ap['rooms'],
price=ap['price'],
address=ap['address'],
desc=ap['desc'],
floor=ap['floor'],
)
for image in ap['photos']:
pic = urllib.request.urlretrieve(image, image.split('/')[-1])[0]
im.img = im.img.save(pic, File(open(pic, 'rb')))
im.apartment = apartment
except Exception as e:
print(e)
break
Ваша проблема в том, что вы не сохраняете изображение .
попробуйте изменить это
def save_data(apartments_list):
for ap in apartments_list:
im = Image()
try:
apartment = Apartment.objects.create(
rooms=ap['rooms'],
price=ap['price'],
address=ap['address'],
desc=ap['desc'],
floor=ap['floor'],
)
for image in ap['photos']:
pic = urllib.request.urlretrieve(image, image.split('/')[-1])[0]
im.img = im.img.save(pic, File(open(pic, 'rb')))
im.apartment = apartment
except Exception as e:
print(e)
break
to
def save_data(apartments_list):
for ap in apartments_list:
im = Image()
try:
apartment = Apartment.objects.create(
rooms=ap['rooms'],
price=ap['price'],
address=ap['address'],
desc=ap['desc'],
floor=ap['floor'],
)
for image in ap['photos']:
pic = urllib.request.urlretrieve(image, image.split('/')[-1])[0]
im.img = im.img.save(pic, File(open(pic, 'rb')))
im.apartment = apartment
im.save() #new
except Exception as e:
print(e)
break