[英]Django form with multiple model instances
我正在创建一个Django应用程序,在该应用程序中,我可以从一个页面中将8张图片(具有8个输入字段,其中一个是帖子的主要图片)添加到Blog Post。 我有以下两个模型:
class Pictures(models.Model):
file_path = models.ImageField(upload_to='posts/', null=True)
post = models.ForeignKey(BlogPost, on_delete=models.CASCADE, null=True)
class BlogPost(models.Model):
title = models.CharField(max_length=100)
以及以下形式:
class CratePostForm(forms.Form):
title = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))
class CreatePicturesPostForm(forms.Form):
main_image = forms.FileField()
image_1 = forms.FileField(required=False)
image_2 = forms.FileField(required=False)
image_3 = forms.FileField(required=False)
image_4 = forms.FileField(required=False)
image_5 = forms.FileField(required=False)
image_6 = forms.FileField(required=False)
image_7 = forms.FileField(required=False)
我可以轻松地创建具有以下形式的帖子:
pictures_form = CreatePicturesPostForm(request.POST, request.FILES)
并将每个图片另存为带有Post外键的新Picture对象。 当我要创建表单的编辑页面时,发生了问题,我必须在表单中加载以前上传的图像并将其显示给用户。
我想做以下事情:
pictures_form = EditPicturesAdForm(instance=pictures)
但是此实例应该是单个对象,而我有许多来自同一模型的Pictures对象实例。
任何想法?
在这种情况下,我强烈建议您使用Django Extra Views。 链接
from extra_views import InlineFormSet
class PicturesInline(InlineFormSet):
model = Pictures
extra = 1
max_num = 8
fields = ('file_path',)
class BlogPostForm(forms.ModelForm):
class Meta:
model = BlogPost
fields = ('title', )
from extra_views import CreateWithInlinesView, UpdateWithInlinesView
class BlogPostCreateView(CreateWithInlinesView):
template_name = ''
model = BlogPost
form_class = BlogPostForm
inlines = [PicturesInline, ]
success_url = ''
class BlogPostUpdateView(UpdateWithInlinesView):
template_name = ''
model = BlogPost
form_class = BlogPostForm
inlines = [PicturesInline, ]
success_url = ''
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.