Невозможно загрузить несколько изображений с помощью админки django
У меня есть две модели: одна - модель поста, которая может иметь несколько связанных изображений. Модель изображений имеет внешний ключ к посту. То есть, изображения имеют внешний ключ для одного поста. При добавлении нового поста я хочу загрузить несколько изображений одновременно. Вот код:
model.py
class Post(models.Model):
title = models.CharField(max_length=255)
thumbnail = models.ImageField(upload_to='thumbnails')
summary = RichTextField()
body = RichTextUploadingField()
created_at = models.DateField(auto_now_add=True)
class Meta:
ordering = ['-created_at',]
def __str__(self):
return self.title
class Imagens(models.Model):
img = models.ImageField(
upload_to = "media/",
)
post = models.ForeignKey(
"Post", on_delete=models.CASCADE, default=1)
admin.py
class ImageAdminForm(forms.ModelForm):
class Meta:
model = Imagens
fields = ['img',]
def __init__(self, *args, **kwargs):
super(ImageAdminForm, self).__init__(*args, **kwargs)
self.fields['img'] = forms.ImageField(widget=forms.ClearableFileInput(attrs={'multiple': True}))
class ImageInline(admin.TabularInline):
model = Imagens
extra = 1
form = ImageAdminForm
class PostAdmin(admin.ModelAdmin):
search_fields = ['title']
inlines = [ImageInline,]
def save_model(self, request, obj, form, change):
obj.save()
files = request.FILES.getlist('img') #he gets nothing
print(files)
for f in files:
x = Imagens.objects.create(post=obj,img=f)
x.save()
admin.site.register(Post, PostAdmin)
Проблема в том, что если я сохраняю объект post, он сохраняет только одно изображение, а если я пытаюсь получить список изображений, он выдает пустой список. Извините, я новичок в Django и даже в python. Любая помощь приветствуется.
Ну, это просто обходной путь. Я сделал так, что основная модель поделилась формой со встроенной моделью. Таким образом, на странице изменения появляются файлы, и я не обязан размещать изображения, но там полно полей.
class ImageAdminForm(forms.ModelForm):
imgens = forms.ImageField(widget=forms.ClearableFileInput(attrs={'multiple': True}))
def __init__(self, *args, **kwargs):
super(ImageAdminForm, self).__init__(*args, **kwargs)
self.fields['imgens'].required = False
self.fields['img'] = forms.ImageField()
self.fields['img'].required = False
class ImageInline(admin.TabularInline):
model = Imagens
extra = 1
form = ImageAdminForm
class PostAdmin(admin.ModelAdmin):
search_fields = ['title']
inlines = [ImageInline]
form = ImageAdminForm
def save_model(self, request, obj, form, change):
obj.save()
files = request.FILES.getlist('imgens')
for f in files:
x = Imagens.objects.create(post=obj,img=f)
x.save()
admin.site.register(Post, PostAdmin)