Django。在模板中使用现有模型实例的内联窗体集
问题描述:
我使用Django 1.7.11和python 2.7。我有两种型号:Django。在模板中使用现有模型实例的内联窗体集
class Adv(models.Model):
title = models.CharField(max_length=255, blank=True)
description = models.TextField(blank=True)
class ImageFile(models.Model):
file = models.ImageField(upload_to=generate_imgname, max_length=50, blank=True)
adv = models.ForeignKey(Adv)
Instance of Adv可以有10个图像文件。 ImageFile在管理中内联。我需要在模板中显示Adv的实例,它的所有图像文件和图像文件必须与表单删除或机会。 做什么是最好的方法?我尝试了inlineformset_factory,但它只显示没有现有图像文件的文件输入形式。
答
你试过使用formset吗? https://docs.djangoproject.com/en/1.7/topics/forms/modelforms/#model-formsets 试试这个。我没有尝试过,但我在我的项目中做了类似的事情,它工作。我希望它有帮助。
forms.py
class AdvForm(ModelForm):
class Meta:
model = Adv
fields = ['title','description']
class ImageFileForm(ModelForm):
class Meta:
model = ImageFile
fields = ['file','adv']
在views.py
,
做这样的事情通过你的进阶
def getAdv(request, adv_instance_id):
adv = get_object_or_404(Adv, pk = adv_instance_id)
ImgFileformSet = modelformset_factory(ImageFile, form = ImageFileForm)
if request.method == 'POST':
Adv = AdvForm(request.POST, instance=adv)
ImgFiles = ImgFileformSet (request.POST, queryset = ImageFile.objects.filter(adv=adv_instance_id), prefix='images',)
// your code
return render(request, 'yourtemplate', {'adv_instance_id','Adv','ImgFiles'})
的实例,并在你的模板中显示的数据。
非常感谢您的回答! – Swallow