Django的。内联formset,包含模板中现有的模型实例

时间:2016-04-29 15:29:18

标签: python django django-models django-forms

我使用Django 1.7.11和python 2.7。我有两个模型:

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)

Adv的实例可以有10个图像文件。 ImageFile是内联管理员。我需要在模板中显示Adv的实例,其所有图像文件和图像文件必须与表单一起删除或偶然。 最好的方法是什么?我尝试了 inlineformset_factory ,但它只显示没有现有图像文件的文件输入表单。

1 个答案:

答案 0 :(得分:2)

您尝试使用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中

做一些事情,比如传递你的adv实例

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'})

并在模板中显示数据。