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

的实例,并在你的模板中显示的数据。

+0

非常感谢您的回答! – Swallow