不能使用django admin上传多个图片



我有两个模型:一个是post模型,可以有多个链接的图像。图像模型有一个帖子的外键。也就是说,图像具有单个帖子的外键。在添加新帖子时,我想同时上传多个图像。下面是代码:

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)

最新更新