如何在模型中使用等效的django管理内联?

时间:2013-08-23 23:27:59

标签: python django django-forms django-admin django-views

Django的管理员允许您轻松创建用于编辑模型及其外键的表单,但如果我在自己的视图中使用ModelForm,则无法完成此操作。这是admin.py中的一个例子:

class VendorPhotoInline(admin.StackedInline):
  model = VendorPhoto
  extra = 3

class VendorAdmin(admin.ModelAdmin):
  inlines = [VendorPhotoInline]

admin.site.register(Vendor, VendorAdmin)

所以现在在管理员中,我可以创建一个供应商并添加一堆照片。但是对于非员工,我有一个用于创建供应商的表单,我想允许他们上传一些像管理员这样的照片。

我正在使用允许用户创建新供应商的ModelForm,但当然,他们无法在此时添加照片:

class VendorForm(ModelForm):
    class Meta:
        model = Vendor

如何在此处实现管理界面的平价?我愿意找到适用于新供应商实例的解决方案,并允许上传最多一定数量(例如3),但适用于现有实例并允许添加/删除照片的内容也很棒。谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

您可以使用inline formsets。来自文档:

假设您有这两个模型:

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    author = models.ForeignKey(Author)
    title = models.CharField(max_length=100)

如果要创建允许编辑书籍的表单集 属于特定作者,您可以这样做:

>>> from django.forms.models import inlineformset_factory
>>> BookFormSet = inlineformset_factory(Author, Book)
>>> author = Author.objects.get(name=u'Mike Royko')
>>> formset = BookFormSet(instance=author)

inlineformset_factory处理幕后的事情,但对于前端部分,您可能会发现django-dynamic-formset jQuery plugin很有用。